Exercice 35 / 100

Pandas - groupby

Calculez la note moyenne par ville

groupby() permet de regrouper les lignes selon une (ou plusieurs) colonne(s), puis d'appliquer une agrégation (moyenne, somme, count...) sur chaque groupe.

C'est l'équivalent du group BY en sql.

Syntaxe

df.groupby('colonne_de_groupe')['colonne_a_agreger'].fonction()

Exemple : note moyenne par ville

df = pd.DataFrame({ 'nom': ['Alice','Bob','Charlie','Diana'], 'note': [14,11,17,13], 'ville': ['Paris','Lyon','Paris','Lyon'] })
df.groupby('ville')['note'].mean() # ville # Lyon 12.0 # Paris 15.5

Décomposé en 3 étapes (split-apply-combine) :

1. SPLIT : regroupe les lignes par valeur de 'ville' (Paris : Alice+Charlie ; Lyon : Bob+Diana) 2. APPLY : applique .mean() sur 'note' dans chaque groupe 3. COMBINE : assemble en une Series indexée par ville
groupby range chaque ligne dans le seau de sa valeur, applique l'agrégation à l'intérieur de chaque seau, puis assemble les résultats

Fonctions d'agrégation classiques

.sum()
somme
.mean()
moyenne
.median()
médiane
.min() / .max()
.count()
nombre de valeurs non nulles
.size()
nombre total de lignes du groupe
.std()
écart-type
.first() / .last()
.nunique()
nb de valeurs distinctes

Plusieurs colonnes / plusieurs agrégations

# Plusieurs colonnes de groupe df.groupby(['ville', 'sexe'])['salaire'].mean()
# Plusieurs agrégations à la fois df.groupby('ville')['note'].agg(['mean', 'min', 'max', 'count'])
# Différentes agrégations par colonne df.groupby('ville').agg({'note': 'mean', 'age': 'max'})

.reset_index() après un groupby pour récupérer un DataFrame plat avec la colonne de groupe comme colonne normale.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →