Maison >développement back-end >Tutoriel Python >Comment trouver des lignes avec le nombre maximum dans les opérations Pandas GroupBy ?

Comment trouver des lignes avec le nombre maximum dans les opérations Pandas GroupBy ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 19:16:16144parcourir

How to Find Rows with the Maximum Count in Pandas GroupBy Operations?

Obtenir des lignes avec un nombre maximum dans les groupes Pandas

Problème :

Comment identifier les lignes avec la valeur la plus élevée pour la colonne « compte » dans un DataFrame pandas lors d'un regroupement par plusieurs colonnes ?

Solution :

Étape 1 : Trouver le nombre maximum pour chaque groupe

Pour déterminer le nombre maximum pour chacun group, utilisez les fonctions groupby() et max() :

max_counts = df.groupby(['Sp', 'Mt'])['count'].max()

Cela créera une série contenant le nombre maximum pour chaque group.

Étape 2 : Identifier les lignes avec un nombre maximum

Pour obtenir les indices des lignes avec un nombre maximum dans le DataFrame d'origine, utilisez la méthode transform() :

idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']

Cela créera une série booléenne où True indique les lignes avec un maximum count.

Étape 3 : Filtrer les lignes en fonction du nombre maximum

Enfin, filtrez le DataFrame à l'aide de l'indexation booléenne pour sélectionner uniquement les lignes avec le nombre maximum :

result = df[idx]

Cela renverra un nouveau DataFrame contenant uniquement les lignes avec la valeur la plus élevée pour la colonne « compte » dans chaque groupe.

Exemples :

Exemple 1 :

df = pd.DataFrame({
    'Sp': ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4', 'MM4'],
    'Mt': ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'],
    'Value': ['a', 'n', 'cb', 'mk', 'bg', 'dgd', 'rd', 'cb', 'uyi'],
    'count': [3, 2, 5, 8, 10, 1, 2, 2, 7]
})

Sortie :

   Sp Mt Value  count
0  MM1 S1     a      3
2  MM1 S3    cb      5
3  MM2 S3    mk      8
4  MM2 S4    bg     10
8  MM4 S2   uyi      7

Exemple 2 :

df = pd.DataFrame({
    'Sp': ['MM2', 'MM2', 'MM4', 'MM4', 'MM4'],
    'Mt': ['S4', 'S4', 'S2', 'S2', 'S2'],
    'Value': ['bg', 'dgd', 'rd', 'cb', 'uyi'],
    'count': [10, 1, 2, 8, 8]
})

Sortie :

   Sp Mt Value  count
4  MM2 S4    bg     10
7  MM4 S2    cb      8
8  MM4 S2   uyi      8

Remarque : Si plusieurs lignes au sein d'un groupe ont le nombre maximum, toutes ces lignes seront renvoyées.

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!

Déclaration:
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