Pandas : comment regrouper et agréger sur plusieurs colonnes
Souvent, vous souhaiterez peut-être regrouper et agréger plusieurs colonnes d’un DataFrame pandas.
Heureusement, cela est facile à faire en utilisant les fonctions pandas .groupby() et .agg() .
Ce tutoriel explique plusieurs exemples d’utilisation pratique de ces fonctions.
Exemple 1 : regrouper par deux colonnes et rechercher la moyenne
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]}) #view DataFrame print(df) team position assists rebounds 0 A G 5 11 1 B G 7 8 2 B F 7 10 3 B G 8 6 4 B F 5 6 5 M F 7 9 6 M C 6 6 7 M C 9 10
Le code suivant montre comment regrouper par colonnes « équipe » et « position » et trouver les passes moyennes :
df.groupby(['team', 'position']).agg({'assists': ['mean']}).reset_index() team position assists mean 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4 M F 7.0
La sortie nous dit :
- La moyenne des passes décisives pour les joueurs en position G de l’équipe A est de 5,0 .
- La moyenne des passes décisives pour les joueurs en position F dans l’équipe B est de 6,0 .
- La moyenne des passes décisives pour les joueurs en position G de l’équipe B est de 7,5 .
Et ainsi de suite.
Nous pouvons également utiliser le code suivant pour renommer les colonnes du DataFrame résultant :
#group by team and position and find mean assists new = df.groupby(['team', 'position']).agg({'assists': ['mean']}).reset_index() #rename columns new.columns = ['team', 'pos', 'mean_assists'] #view DataFrame print(new) team pos mean_assists 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4 M F 7.0
Exemple 2 : regrouper par deux colonnes et rechercher plusieurs statistiques
Supposons que nous utilisons le même DataFrame pandas que l’exemple précédent :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})
Le code suivant montre comment trouver le nombre médian et maximum de rebonds, regroupés dans les colonnes « équipe » et « position » :
df.groupby(['team', 'position']).agg({'rebounds': ['median', 'max']}).reset_index() team position rebounds median max 0 A G 11 11 1 B F 8 10 2 B G 7 8 3 M C 8 10 4 M F 9 9
La sortie nous dit :
- La médiane des rebonds pour les joueurs en position G de l’équipe A est de 11 .
- Le maximum de rebonds pour les joueurs en position G de l’équipe A est de 11 .
- La médiane des rebonds des joueurs en position F de l’équipe B est de 8 .
- Le maximum de rebonds pour les joueurs en position F de l’équipe B est de 10 .
Et ainsi de suite.
Ressources additionnelles
Comment filtrer un DataFrame Pandas sur plusieurs conditions
Comment compter les valeurs manquantes dans un DataFrame Pandas
Comment empiler plusieurs DataFrames Pandas