Una última pregunta de pandas para novatos del día: ¿Cómo puedo generar una tabla para una sola serie?
Por ejemplo:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Muchas búsquedas en Google me han llevado a Series.describe () y pandas.crosstabs, pero ninguno de estos hace exactamente lo que necesito: una variable, cuenta por categorías. Ah, y sería bueno si funcionara para diferentes tipos de datos: cadenas, entradas, etc.
.value_counts().sort_index(1)
, para evitar que la primera columna posiblemente seAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
que devuelve una serie cuyos atributosindex
yvalues
contienen los elementos únicos y sus recuentos respectivamente.Puede usar la comprensión de listas en un marco de datos para contar las frecuencias de las columnas como tales
Descompostura:
fuente
La respuesta proporcionada por @DSM es simple y directa, pero pensé en agregar mi propia entrada a esta pregunta. Si observa el código de pandas.value_counts , verá que están sucediendo muchas cosas.
Si necesita calcular la frecuencia de muchas series, esto podría llevar un tiempo. Una implementación más rápida sería usar numpy.unique con
return_counts = True
Aquí hay un ejemplo:
Observe aquí que el artículo devuelto es un pandas.
En comparación,
numpy.unique
devuelve una tupla con dos elementos, los valores únicos y los recuentos.Luego, puede combinarlos en un diccionario:
Y luego en un
pandas.Series
fuente
para la distribución de frecuencia de una variable con valores excesivos, puede colapsar los valores en clases,
Aquí tengo valores excesivos para la
employrate
variable, y no hay significado de su distribución de frecuencia con directavalues_count(normalize=True)
distribución de frecuencia
values_count(normalize=True)
sin clasificación, la longitud del resultado aquí es 139 (parece insignificante como distribución de frecuencia):poniendo clasificación ponemos todos los valores con un rango determinado es decir.
después de la clasificación tenemos una clara distribución de frecuencias. aquí podemos ver fácilmente, que
37.64%
de países tienen tasa de empleo entre51-60%
y11.79%
de países tienen tasa de empleo entre71-80%
fuente