Cuente la frecuencia con la que aparece un valor en una columna de marco de datos
tengo un conjunto de datos
category
cat a
cat b
cat a
Me gustaría devolver algo como lo siguiente que muestra los valores únicos y sus frecuencias.
category freq
cat a 2
cat b 1
Aceptado
Úselo value_counts()
como comentó @DSM.
In [37]:
df = pd.DataFrame({'a':list('abssbab')})
df['a'].value_counts()
Out[37]:
b 3
a 2
s 2
dtype: int64
También groupby
y count
. Hay muchas formas de despellejar a un gato aquí.
In [38]:
df.groupby('a').count()
Out[38]:
a
a
a 2
b 3
s 2
[3 rows x 1 columns]
Consulte los documentos en línea .
Si desea volver a agregar frecuencia al marco de datos original, use transform
para devolver un índice alineado:
In [41]:
df['freq'] = df.groupby('a')['a'].transform('count')
df
Out[41]:
a freq
0 a 2
1 b 3
2 s 2
3 s 2
4 b 3
5 a 2
6 b 3
[7 rows x 2 columns]
Si desea aplicar a todas las columnas, puede usar:
df.apply(pd.value_counts)
Esto aplicará una función de agregación basada en columnas (en este caso value_counts) a cada una de las columnas.
df.category.value_counts()
Esta pequeña línea de código le dará el resultado que desea.
Si el nombre de tu columna tiene espacios, puedes utilizarlos.
df['category'].value_counts()