Exercice 70 / 100

Pandas — Pivot Table

Crée des tableaux croisés dynamiques

Une table pivot transforme des lignes en colonnes pour croiser deux dimensions. C'est l'équivalent du tableau croisé dynamique Excel.

Syntaxe

pd.pivot_table( df, values='colonne_a_agreger', index='colonne_en_ligne', columns='colonne_en_colonne', aggfunc='sum' # ou 'mean', 'count', 'max', etc. )

Forme équivalente : df.pivot_table(values=..., index=..., columns=..., aggfunc=...)

Exemple : ventes par jour et par produit

df = pd.DataFrame({ 'date': ['Lun','Lun','Mar','Mar','Mer','Mer'], 'produit': ['A','B','A','B','A','B'], 'ventes': [100, 150, 120, 130, 90, 160] })
pd.pivot_table(df, values='ventes', index='date', columns='produit', aggfunc='sum') # produit A B # date # Lun 100 150 # Mar 120 130 # Mer 90 160

Paramètres utiles

fill_value=0 remplace les NaN par 0 margins=True ajoute une ligne+colonne 'All' (totaux) aggfunc=['sum','mean'] plusieurs agrégations à la fois aggfunc={'col1':'sum', 'col2':'mean'} différentes par colonne

crosstab : version simplifiée pour COMPTER

pd.crosstab(df['date'], df['produit']) # produit A B # date # Lun 1 1 # Mar 1 1 # Mer 1 1
pd.crosstab(df['date'], df['produit'], values=df['ventes'], aggfunc='sum') # avec une mesure
pd.crosstab(df['date'], df['produit'], normalize=True) # en pourcentages

pivot_table vs pivot

df.pivot(...) n'agrège pas : crash si combinaisons en doublon df.pivot_table(...) agrège (avec aggfunc) → gère les doublons

👉 En pratique, utilise toujours pivot_table.

pivot et pivot_table croisent les mêmes colonnes, mais seul pivot_table sait quoi faire quand deux lignes tombent dans la même case : il les agrège au lieu de s'arrêter en erreur

Couplé à .plot(kind='bar'), une pivot table devient un graphique en barres groupées en une ligne.

exercise.py

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