veces values value_counts valores una tabla repite repetidos lista frecuencias ejemplos cuantas contar python pandas

python - values - contar la frecuencia con la que se produce un valor en una columna de marco de datos



tabla de frecuencias en python (11)

En 0.18.1 groupby junto con count no da la frecuencia de valores únicos:

>>> df a 0 a 1 b 2 s 3 s 4 b 5 a 6 b >>> df.groupby(''a'').count() Empty DataFrame Columns: [] Index: [a, b, s]

Sin embargo, los valores únicos y sus frecuencias se determinan fácilmente usando el size :

>>> df.groupby(''a'').size() a a 2 b 3 s 2

Con df.a.value_counts() valores ordenados (en orden descendente, es decir, el valor más grande primero) se devuelven por defecto.

Tengo un conjunto de datos

|category| cat a cat b cat a

Me gustaría poder devolver algo así como (mostrando valores únicos y frecuencia)

category | freq | cat a 2 cat b 1


Esto debería funcionar:

df.groupby(''category'').size()


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.


Si su DataFrame tiene valores del mismo tipo, también puede establecer return_counts=True en numpy.unique() .

index, counts = np.unique(df.values,return_counts=True)

np.bincount() podría ser más rápido si tus valores son enteros.


Sin ninguna biblioteca, podrías hacer esto en su lugar:

def to_frequency_table(data): frequencytable = {} for key in data: if key in frequencytable: frequencytable[key] += 1 else: frequencytable[key] = 1 return frequencytable

Ejemplo:

to_frequency_table([1,1,1,1,2,3,4,4]) >>> {1: 4, 2: 1, 3: 1, 4: 2}


También puede hacer esto con los pandas transmitiendo primero sus columnas como categorías, por ejemplo, dtype="category" por ej.

cats = [''client'', ''hotel'', ''currency'', ''ota'', ''user_country''] df[cats] = df[cats].astype(''category'')

y luego llamar describe :

df[cats].describe()

Esto le dará una buena tabla de recuentos de valores y un poco más :):

client hotel currency ota user_country count 852845 852845 852845 852845 852845 unique 2554 17477 132 14 219 top 2198 13202 USD Hades US freq 102562 8847 516500 242734 340992


Usar groupby y count :

In [37]: df = pd.DataFrame({''a'':list(''abssbab'')}) df.groupby(''a'').count() Out[37]: a a a 2 b 3 s 2 [3 rows x 1 columns]

Consulte los documentos en línea: http://pandas.pydata.org/pandas-docs/stable/groupby.html

También value_counts() como @DSM ha comentado, muchas maneras de despellejar a un gato aquí

In [38]: df[''a''].value_counts() Out[38]: b 3 a 2 s 2 dtype: int64

Si desea volver a agregar la frecuencia al marco de datos original, use la 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]


Usar la lista de comprensión y la cantidad de valores para múltiples columnas en un df

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=[''O'']).columns)]

https://.com/a/28192263/786326


Use el método size ():

import pandas as pd print df.groupby[''category''].size() #where df is your dataframe


df.apply(pd.value_counts).fillna(0)

value_counts() - Devuelve un objeto que contiene recuentos de valores únicos

apply - frecuencia de conteo en cada columna. Si establece axis = 1, obtiene frequncy en cada fila

fillna (0) - hacer que la producción sea más elegante. Cambió NaN a 0


df.category.value_counts()

Esta pequeña línea de código le dará el resultado que desea.