Pandas : comment utiliser GroupBy avec nlargest()



Vous pouvez utiliser la syntaxe suivante pour afficher les n plus grandes valeurs par groupe dans un DataFrame pandas :

#display two largest values by group
df.groupby('group_var')['values_var'].nlargest(2)

Et vous pouvez utiliser la syntaxe suivante pour effectuer certaines opérations (comme prendre la somme) sur les n plus grandes valeurs par groupe dans un DataFrame pandas :

#find sum of two largest values by group
df.groupby('group_var')['values_var'].apply(lambda grp: grp.nlargest(2).sum())

Les exemples suivants montrent comment utiliser chaque méthode en pratique avec le DataFrame pandas suivant :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   'points': [12, 29, 34, 14, 10, 11, 7, 36, 34, 22]})

#view DataFrame
print(df)

  team  points
0    A      12
1    A      29
2    A      34
3    A      14
4    A      10
5    B      11
6    B       7
7    B      36
8    B      34
9    B      22

Exemple 1 : Afficher les N plus grandes valeurs par groupe

On peut utiliser la syntaxe suivante pour afficher les deux plus grandes valeurs de points regroupées par équipe :

#display two largest points values grouped by team
df.groupby('team')['points'].nlargest(2)

team   
A     2    34
      1    29
B     7    36
      8    34
Name: points, dtype: int64

Le résultat affiche les deux plus grandes valeurs de points pour chaque équipe , ainsi que leurs positions d’index dans le DataFrame d’origine.

Exemple 2 : effectuer une opération sur les N plus grandes valeurs par groupe

On peut utiliser la syntaxe suivante pour calculer la somme des deux plus grandes valeurs de points regroupées par équipe :

#calculate sum of two largest points values for each team
df.groupby('team')['points'].apply(lambda grp: grp.nlargest(2).sum())

team
A    63
B    70
Name: points, dtype: int64

Voici comment interpréter le résultat :

  • La somme des deux plus grandes valeurs de points pour l’équipe A est de 63 .
  • La somme des deux plus grandes valeurs de points pour l’équipe B est de 70 .

Nous pouvons utiliser une syntaxe similaire pour calculer la moyenne des deux plus grandes valeurs de points regroupées par équipe :

#calculate  mean of two largest points values for each team
df.groupby('team')['points'].apply(lambda grp: grp.nlargest(2).mean())

team
A    31.5
B    35.0
Name: points, dtype: float64

Voici comment interpréter le résultat :

  • La moyenne des deux plus grandes valeurs de points pour l’équipe A est de 31,5 .
  • La moyenne des deux plus grandes valeurs de points pour l’équipe B est de 35,0 .

Remarque : Vous pouvez trouver la documentation complète de la fonction GroupBy ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :

Pandas : comment calculer la somme cumulée par groupe
Pandas : comment compter les valeurs uniques par groupe
Pandas : comment calculer le mode par groupe
Pandas : comment calculer la corrélation par groupe

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *