Comment obtenir le numéro de la plus fréquente de la valeur dans une colonne?
J'ai un bloc de données et je voudrais savoir combien de fois une colonne donnée a la plus fréquente de la valeur.
J'essaie de le faire de la manière 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
Comme je le comprends, avec la première ligne, je reçois de la série dans laquelle les valeurs de la colonne sont utilisés comme clé et la fréquence de ces valeurs sont utilisées en tant que valeurs. Donc, j'ai juste besoin de trouver la plus grande valeur de la série et, en raison de certaines raisons, il ne fonctionne pas. Quelqu'un sait comment ce problème peut être résolu?
- Sont là
na
's dans votre colonne? Si oui, vous devriez vous débarrasser d'eux avecdropna
oufillna
.
Vous devez vous connecter pour publier un commentaire.
Il semble que vous pouvez avoir certaines valeurs null dans la colonne. Vous pouvez les déposer avec
df = df.dropna(subset=['item'])
. Puisdf['item'].value_counts().max()
devrait vous donner le max qui compte, etdf['item'].value_counts().idxmax()
devrait vous donner la plus fréquente de la valeur..fillna()
au lieu de.dropna()
df['item'].value_counts().nlargest(n=2).iloc[[2]]
De continuer à @jonathanrocher réponse que vous pourriez utiliser
mode
dans les pandas DataFrame. Il va donner une plus fréquent des valeurs (un ou deux) à travers les lignes ou les colonnes:Vous pouvez également envisager l'utilisation de scipy est
mode
fonction qui ignore NaN. Une solution à l'aide, il pourrait ressembler à:La sortie devrait ressembler
ce qui signifie que les valeurs les plus courantes sont
2
pour la première colonnes et3
pour la deuxième, avec des fréquences3
et2
respectivement.Il suffit de prendre la première ligne de votre
items_counts
série:Cela fonctionne parce que
mp.De la série.value_counts
asort=True
par défaut et est donc déjà commandé en compte, plus les compter en premier. L'extraction d'une valeur d'un index par lieu a O(1) de la complexité, tout enmp.De la série.idxmax
a O(n) la complexité où n est le nombre de catégories.Précisant
sort=False
est encore possible, et puisidxmax
est recommandé:Avis dans ce cas, vous n'avez pas besoin d'appeler
max
etidxmax
séparément, il suffit d'extraire l'index viaidxmax
et d'alimentation de laloc
étiquette en fonction de l'indexeur.Ajouter cette ligne de code pour trouver les plus fréquentes de la valeur