pandas - index - ¿Cómo obtener el número del valor más frecuente en una columna?
pandas plot (3)
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]:
a b
0 2 3.0
Tengo un marco de datos 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.