¿Cómo obtener el número del valor más frecuente en una columna?

Tengo un dataframe y me gustaría saber cuántas veces una columna dada tiene el valor más frecuente.

Intento hacerlo de la siguiente manera:

items_counts = df['item'].value_counts() max_item = items_counts.max() 

Como resultado obtengo:

 ValueError: cannot convert float NaN to integer 

Por lo que entiendo, con la primera línea obtengo series en las que los valores de una columna se utilizan como clave y la frecuencia de estos valores se utiliza como valores. Entonces, solo necesito encontrar el mayor valor en la serie y, por alguna razón, no funciona. ¿Alguien sabe cómo se puede resolver este problema?

    Parece que puedes tener algunos nulos en la columna. Puede soltarlos con df = df.dropna(subset=['item']) . Entonces df['item'].value_counts().max() debe darle los conteos máximos, y df['item'].value_counts().idxmax() debe darle el valor más frecuente.

    También puede considerar el uso de la función de mode scipy que ignora NaN. Una solución al usarlo podría verse como:

     from scipy.stats import mode from numpy import nan df = DataFrame({"a": [1,2,2,4,2], "b": [nan, nan, nan, 3, 3]}) print mode(df) 

    La salida se vería como

     (array([[ 2., 3.]]), array([[ 3., 2.]])) 

    lo que significa que los valores más comunes son 2 para las primeras columnas y 3 para la segunda, con frecuencias 3 y 2 respectivamente.

    Para continuar con la respuesta de @jonathanrocher, puede usar el mode en pandas DataFrame. Proporcionará los valores más frecuentes (uno o dos) en las filas o columnas:

     import pandas as pd import numpy as np df = pd.DataFrame({"a": [1,2,2,4,2], "b": [np.nan, np.nan, np.nan, 3, 3]}) In [2]: df.mode() Out[2]: ab 0 2 3.0 

    Simplemente tome la primera fila de su serie items_counts :

     top = items_counts.head(1) # or items_counts.iloc[[0]] value, count = top.index[0], top.iat[0] 

    Esto funciona porque pd.Series.value_counts tiene sort=True de forma predeterminada y, por lo tanto, ya está ordenado por conteos, el conteo más alto primero. La extracción de un valor de un índice por ubicación tiene una complejidad O (1), mientras que pd.Series.idxmax tiene una pd.Series.idxmax O ( n ) donde n es el número de categorías.

    Especificar sort=False todavía es posible y luego se recomienda idxmax :

     items_counts = df['item'].value_counts(sort=False) top = items_counts.loc[[items_counts.idxmax()]] value, count = top.index[0], top.iat[0] 

    Tenga en cuenta que en este caso no necesita llamar a max e idxmax separado, simplemente extraiga el índice a través de idxmax y alimente al indexador basado en tags loc .