Maison > développement back-end > Tutoriel Python > Comment trouver la valeur la plus fréquente dans chaque groupe d'un DataFrame Pandas ?

Comment trouver la valeur la plus fréquente dans chaque groupe d'un DataFrame Pandas ?

Linda Hamilton
Libérer: 2024-12-01 08:22:10
original
163 Les gens l'ont consulté

How to Find the Most Frequent Value in Each Group of a Pandas DataFrame?

Sélectionnez la valeur la plus courante pour chaque groupe dans un DataFrame

Pour nettoyer les données contenant plusieurs colonnes de chaîne, il est nécessaire de regrouper les lignes par certaines colonnes et de sélectionner la valeur la plus courante. valeur commune pour une colonne spécifique au sein de chaque groupe. Cet article montre comment accomplir cette tâche à l'aide de la puissante bibliothèque Pandas.

Correction du code pour des messages d'erreur spécifiques

Le code fourni dans la requête initiale contient certaines erreurs, qui ont été corrigées ci-dessous :

import pandas as pd

source = pd.DataFrame({
    'Country': ['USA', 'USA', 'Russia', 'USA'], 
    'City': ['New York', 'New York', 'Saint Petersburg', 'New York'],
    'Short Name': ['NY', 'New', 'Spb', 'NY']})

# Group by 'Country' and 'City' and calculate the most frequent 'Short Name' in each group
result = source.groupby(['Country', 'City'])['Short Name'].apply(lambda x: pd.Series.mode(x)[0][0])
Copier après la connexion

Explication

  1. Utilisez le dernier Series.mode :Le le code original tente d'appliquer Statistics.mode à chaque groupe, ce qui ne gère pas bien plusieurs modes et peut générer une erreur. Au lieu de cela, la fonction pd.Series.mode la plus récente est utilisée, qui renvoie explicitement une série de tous les modes, résolvant ainsi le problème.
  2. Gérer plusieurs modes : Pour garantir qu'un seul Si la valeur la plus courante est sélectionnée, le code extrait le premier élément de la série renvoyée par Series.mode. Ceci est réalisé en utilisant la syntaxe 0.

Options supplémentaires

Si un DataFrame est préféré comme résultat :

result = source.groupby(['Country', 'City'])['Short Name'].agg(pd.Series.mode).to_frame()
Copier après la connexion

Si vous souhaitez des lignes séparées pour chacun mode :

result = source.groupby(['Country', 'City'])['Short Name'].apply(pd.Series.mode)
Copier après la connexion

Remarque : Si vous êtes prêt à accepter n'importe quelle valeur de mode comme sélection, vous pouvez utiliser une fonction lambda qui extrait le premier mode de la série :

result = source.groupby(['Country', 'City'])['Short Name'].agg(lambda x: pd.Series.mode(x)[0])
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal