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