groupby est l'opération la plus puissante de pandas. Modèle split-apply-combine :
SPLIT : regrouper les lignes par valeur(s) d'une (ou plusieurs) colonne(s)
APPLY : appliquer une fonction (mean, sum, custom...) à chaque groupe
COMBINE : assembler le résultatdf.groupby('dept')['salaire'].mean()Renvoie une Series indexée par les valeurs de 'dept'.
.sum() .mean() .median() .std() .var()
.min() .max() .count() .size()
.first() .last() .nunique()Différence count vs size :
count : nb de valeurs NON-nulles
size : nb total de lignes (NaN inclus)# Plusieurs fonctions sur une colonne
df.groupby('dept')['salaire'].agg(['mean', 'min', 'max'])# Différentes fonctions par colonne
df.groupby('dept').agg({'salaire': ['mean', 'max'], 'bonus': 'sum'})# Renommer le résultat (named aggregation)
df.groupby('dept').agg(
salaire_moyen=('salaire', 'mean'),
bonus_total=('bonus', 'sum'),
)df.groupby(['dept', 'ville'])['salaire'].mean()
# → Series avec MultiIndex (dept, ville)df.groupby('dept')['salaire'].mean().reset_index()
# → DataFrame avec 2 colonnes (dept, salaire) au lieu d'une Seriesdf = pd.DataFrame({
'dept': ['Tech','RH','Tech','Finance','RH','Tech'],
'salaire': [55000, 42000, 62000, 58000, 45000, 47000],
'bonus': [5000, 3000, 7000, 4000, 3500, 4500]
})print(df.groupby('dept')['salaire'].mean())
# dept
# Finance 58000.0
# RH 43500.0
# Tech 54666.6...print(df.groupby('dept').agg({'salaire': ['mean', 'max'], 'bonus': 'sum'}))groupby est paresseux : groupby() ne calcule rien tant qu'on n'appelle pas une agrégation. Cela permet d'enchaîner des opérations efficacement.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →