ConsigneAgrège des données avec groupby()
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 groupeCOMBINE : 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-nullessize : nb total de lignes (NaN inclus)# Plusieurs fonctions sur une colonnedf.groupby('dept')['salaire'].agg(['mean', 'min', 'max'])# Différentes fonctions par colonnedf.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 →