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=...)
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 160fill_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 colonnepd.crosstab(df['date'], df['produit'])
# produit A B
# date
# Lun 1 1
# Mar 1 1
# Mer 1 1pd.crosstab(df['date'], df['produit'], values=df['ventes'], aggfunc='sum')
# avec une mesurepd.crosstab(df['date'], df['produit'], normalize=True)
# en pourcentagesdf.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.
Couplé à .plot(kind='bar'), une pivot table devient un graphique en barres groupées en une ligne.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →