Cuente la frecuencia con la que aparece un valor en una columna de marco de datos

Resuelto yoshiserry asked hace 10 años • 16 respuestas

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
yoshiserry avatar Mar 14 '14 04:03 yoshiserry
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 groupbyy 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 transformpara 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]
EdChum avatar Mar 13 '2014 21:03 EdChum

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.

Arran Cudbard-Bell avatar Apr 05 '2016 18:04 Arran Cudbard-Bell
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()
Satyajit Dhawale avatar Jan 15 '2018 17:01 Satyajit Dhawale