Comment obtenir le nombre de la valeur la plus fréquente dans une colonne?

j'ai une base de données et j'aimerais savoir combien de fois une colonne donnée a la valeur la plus fréquente.

j'ai essayer de le faire de la façon suivante:

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

Comme un résultat que j'obtiens:

ValueError: cannot convert float NaN to integer
<!-Pour autant que je sache, avec la première ligne, j'obtiens une série dans laquelle les valeurs d'une colonne sont utilisées comme clé et la fréquence de ces valeurs est utilisée comme valeurs. Donc, j'ai juste besoin de trouver la plus grande valeur dans la série et, pour une raison quelconque, il ne travail. Quelqu'un sait comment ce problème peut être résolu?

28
demandé sur Roman 2013-02-28 19:11:19

3 réponses

on dirait que vous avez des nulls dans la colonne. Vous pouvez les déposer avec df = df.dropna(subset=['item']). Puis df['item'].value_counts().max() devrait vous donner les comptes max, et df['item'].value_counts().idxmax() devrait vous donner la valeur la plus fréquente.

36
répondu beardc 2013-02-28 15:43:31

vous pouvez également envisager d'utiliser scipy mode fonction qui ignore NaN. Une solution l'utilisant pourrait ressembler à:

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 sortie ressemblerait à

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

ce qui signifie que les valeurs les plus courantes sont 2 pour les premières colonnes et 3 pour la seconde, avec des fréquences 3 et 2 respectivement.

11
répondu jonathanrocher 2015-05-05 22:00:49

Pour continuer à @jonathanrocher réponse vous pouvez utiliser mode dans les pandas DataFrame. Il donne les valeurs les plus fréquentes (un ou deux) à travers les lignes ou les colonnes:

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
9
répondu Anton Protopopov 2017-05-11 05:05:00