Sans agrégation de données avec Pandas, impossible d’obtenir des informations vraiment utiles. C’est d’ailleurs la raison pour laquelle on utilise tant les tableaux croisés dynamiques dans Excel. L’agrégation est une étape essentielle de l’analyse de données : elle consiste à appliquer des fonctions comme la somme, la moyenne ou le décompte à des groupes de données.
Regrouper les données avec groupby #
La méthode groupby() regroupe les données selon une ou plusieurs colonnes. Tu peux la voir comme une version puissante de l’instruction GROUP BY de SQL. Ensuite, tu choisis la colonne à résumer, puis la fonction d’agrégation (mean, sum, max, min…). Si tu n’indiques aucune colonne, la fonction s’applique à toutes les colonnes numériques.
groupby avec une seule colonne #
Imaginons des données de ventes que tu veux regrouper par catégorie, pour calculer le total des ventes de chacune :
import pandas as pd
data = {'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing'],
'Sales': [1000, 500, 800, 500]}
df = pd.DataFrame(data)
# Regroupement par 'Category'
grouped_data = df.groupby('Category')
# On choisit la colonne des ventes et la fonction sum
total_sales = grouped_data['Sales'].sum()
print(total_sales)PythonCategory
Clothing 1000
Electronics 1800
Name: Sales, dtype: int64groupby avec plusieurs colonnes #
Pour regrouper selon plusieurs colonnes, passe-les dans une liste. Ici, on regroupe des notes d’élèves par classe et par genre, puis on calcule la moyenne en mathématiques :
data = {'Class': ['A', 'B', 'A', 'B', 'A', 'B'],
'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Female'],
'Math_Score': [85, 92, 78, 89, 90, 86],
'English_Score': [88, 94, 80, 92, 92, 88],
'Physics_Score': [78, 90, 85, 92, 88, 84]}
df = pd.DataFrame(data)
grouped_data = df.groupby(['Class', 'Gender'])
# Moyenne des notes de mathématiques par classe et par genre
print(grouped_data['Math_Score'].mean())PythonClass Gender
A Female 78.0
Male 87.5
B Female 87.5
Male 92.0
Name: Math_Score, dtype: float64Sans spécifier de colonne #
Sans indiquer de colonne, la fonction d’agrégation s’applique à toutes les colonnes numériques du DataFrame groupé :
print(grouped_data.mean())Python Math_Score English_Score Physics_Score
Class Gender
A Female 78.0 80.0 85.0
Male 87.5 90.0 83.0
B Female 87.5 90.0 88.0
Male 92.0 94.0 90.0Les fonctions d’agrégation #
Les fonctions d’agrégation résument les données au sein de chaque groupe. Les plus courantes sont sum(), max(), min(), mean(), median() et count(). La méthode agg() te permet en plus d’appliquer plusieurs fonctions en une seule fois, voire des fonctions personnalisées.
Par exemple, pour calculer la moyenne, le minimum et le maximum de la note de mathématiques :
agg_results = grouped_data['Math_Score'].agg(['mean', 'min', 'max'])
print(agg_results)Python mean min max
Class Gender
A Female 78.0 78 78
Male 87.5 85 90
B Female 87.5 86 89
Male 92.0 92 92Et pour appliquer plusieurs fonctions à plusieurs colonnes (ici les mathématiques et la physique), passe un dictionnaire à agg() :
aggregated_data = grouped_data.agg({
'Math_Score': ['mean', 'min', 'max'],
'Physics_Score': ['mean', 'min', 'max']
})
print(aggregated_data)Python Math_Score Physics_Score
mean min max mean min max
Class Gender
A Female 78.0 78 78 85.0 85 85
Male 87.5 85 90 83.0 78 88
B Female 87.5 86 89 88.0 84 92
Male 92.0 92 92 90.0 90 90Tableaux croisés dynamiques et tables de contingence #
Si tu as déjà utilisé Excel, tu sais à quel point les tableaux croisés dynamiques sont efficaces : ils permettent d’organiser et d’analyser les données sous différents angles.
- Avec
pd.pivot_table(), tu crées des tableaux croisés dynamiques ; - Avec
pd.crosstab(), tu crées des tables de contingence, une autre méthode d’agrégation particulièrement adaptée aux variables catégorielles : elle compte le nombre d’occurrences pour chaque combinaison de catégories.
data = {'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing'],
'Region': ['North', 'South', 'North', 'South'],
'Sales': [1000, 500, 800, 750],
'Profit': [150, 50, 120, 100]}
df = pd.DataFrame(data)
# Pivot table : somme des ventes par catégorie et par région
pivot_table = pd.pivot_table(df, index='Category', columns='Region',
values='Sales', aggfunc='sum')
# Crosstab : nombre de lignes pour chaque combinaison catégorie / région
cross_tab = pd.crosstab(df['Category'], df['Region'])
print("Pivot Table :")
print(pivot_table)
print("\nCross-Tabulation :")
print(cross_tab)PythonPivot Table :
Region North South
Category
Clothing NaN 1250.0
Electronics 1800.0 NaN
Cross-Tabulation :
Region North South
Category
Clothing 0 2
Electronics 2 0Tu sais maintenant regrouper et résumer un jeu de données. La suite de la série porte sur la visualisation de données avec Pandas. Pour aller plus loin sur groupby, consulte la documentation officielle de Pandas.
Pour aller plus loin, consulte aussi notre guide des 10 astuces Pandas en Python.
groupby prend tout son sens quand les données sont imparfaites. Dans le cours Nettoyage de données, tu l’utilises avec merge et melt sur des projets réels.

