Maison > développement back-end > Tutoriel Python > Comment trouver efficacement la valeur la plus courante dans un groupe Pandas DataFrame ?

Comment trouver efficacement la valeur la plus courante dans un groupe Pandas DataFrame ?

Linda Hamilton
Libérer: 2024-11-29 11:32:15
original
252 Les gens l'ont consulté

How to Efficiently Find the Most Common Value in a Pandas DataFrame Group?

GroupBy pandas DataFrame et sélection de la valeur la plus courante

Problème


Supposons que vous disposiez d'un bloc de données avec plusieurs colonnes de chaînes. Chaque combinaison des deux premières colonnes ne doit avoir qu'une seule valeur valide dans la troisième colonne. Vous devez nettoyer les données de manière cohérente en regroupant le bloc de données par les deux premières colonnes et en sélectionnant la valeur la plus courante de la troisième colonne pour chaque combinaison.

Le code suivant démontre une tentative pour y parvenir :


import pandas as pd<br>from scipy import stats</p>
<p>source = pd.DataFrame({</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'Country': ['USA', 'USA', 'Russia', 'USA'], 
'City': ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
'Short name': ['NY', 'New', 'Spb', 'NY']})
Copier après la connexion

source.groupby(['Pays','Ville']).agg(lambda x: stats.mode(x[' Nom court'])(0])

Cependant, le la dernière ligne de code échoue avec une KeyError. Comment pouvez-vous résoudre ce problème ?

Solution


Pandas >= 0.16< /h4>

Pour les versions Pandas 0.16 et versions ultérieures, utilisez le code suivant :


source.groupby(['Country','City'])['Short name'].agg(pd.Series.mode) <br>

Ce code utilise la fonction pd.Series.mode, qui a été introduite dans Pandas 0.16, pour trouver la valeur la plus courante dans chaque groupe.

Alternatives pour gérer plusieurs modes


La fonction Series.mode gère les cas avec plusieurs modes effectivement :



  • S'il existe plusieurs modes, il renvoie une Series contenant tous les modes.

  • Si vous avez besoin d'une ligne distincte pour chaque mode, utilisez GroupBy.apply(pd.Series.mode).< /li>
  • Si vous avez besoin de l'un des modes, utilisez GroupBy.agg(lambda x: pd.Series.mode(x)[0]).

< h4>Alternatives à Considérez

Bien que vous puissiez utiliser Statistics.mode à partir de Python, il ne gère pas bien plusieurs modes et peut générer une StatisticsError. Par conséquent, ce n’est pas recommandé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal