Un tableau croisé dynamique basique, quelques colonnes à agréger, ne pose aucun problème sous Excel. Les difficultés commencent dès qu'il faut ajouter une colonne calculée à cette agrégation : une moyenne, une part du total, un ratio. Une formule classique à côté du TCD ne s'adapte pas quand celui-ci change de forme, et Power Pivot, la solution native pour aller plus loin, ajoute une interface et un langage supplémentaires pour un résultat qui reste, en pratique, assez fastidieux à maintenir.
Avec pandas, la librairie de référence pour manipuler des données en Python, ce même besoin devient étonnamment simple, pour une raison structurelle : le résultat d'une agrégation reste un DataFrame, exactement comme les données de départ.
Le TCD basique, aucun souci
Regrouper des lignes par catégorie et sommer une colonne, l'usage le plus courant d'un TCD, Excel le fait très bien, avec une interface accessible et un résultat immédiat. Ce n'est pas ce cas d'usage qui pose problème.
Là où ça se complique : ajouter une colonne à l'agrégation
Le vrai casse-tête commence dès qu'il faut aller un peu plus loin : ajouter une moyenne par ligne, un ratio, une part du total, à côté des colonnes déjà agrégées. Deux options s'offrent alors, sans qu'aucune ne soit vraiment satisfaisante :
- Une formule classique, à côté du TCD. C'est la solution la plus intuitive, mais elle ne s'adapte pas à l'évolution du TCD : dès qu'une ligne apparaît, disparaît, ou que la source de données change, la formule doit être réajustée manuellement.
- Power Pivot, la solution native pour aller plus loin. Elle ajoute une interface supplémentaire au-dessus du TCD classique, et impose d'apprendre un langage de formules à part, DAX, avec des notions (contexte de ligne, contexte de filtre) qui ont une réputation méritée de complexité, même chez des utilisateurs expérimentés d'Excel.
Ce que change pandas
En pandas, une agrégation part d'un DataFrame (l'équivalent d'une plage de données Excel) et aboutit à un DataFrame. Rien de spécial : le résultat se manipule exactement comme n'importe quelle autre donnée, avec les mêmes outils. Ajouter une colonne calculée à une agrégation n'est donc jamais un cas particulier, juste une ligne de code de plus :
import pandas as pd
rapport = (
donnees
.groupby("centre_de_cout", as_index=False)
.agg(montant_total=("montant", "sum"), nombre_commandes=("montant", "count"))
)
rapport["montant_moyen"] = rapport["montant_total"] / rapport["nombre_commandes"]
rapport["part_du_total"] = rapport["montant_total"] / rapport["montant_total"].sum()
Ces deux dernières lignes fonctionnent exactement comme elles le feraient sur n'importe quel autre DataFrame, parce que c'en est un. Pas de champ calculé, pas de DAX, pas de formule à réajuster : si la source change, il suffit de relancer le script, et le résultat reste juste.
Ce même DataFrame peut tout aussi bien provenir de plusieurs fichiers combinés au préalable, sans que la logique change : le résultat d'une agrégation reste un DataFrame, quelle que soit son origine.
Le comparatif, critère par critère
| Critère | TCD Excel (+ Power Pivot) | pandas (Python) |
|---|---|---|
| Agrégation simple | Très accessible, résultat immédiat | Aussi simple, une ligne de code |
| Ajouter une colonne calculée à l'agrégation | Formule externe fragile, ou Power Pivot et son langage DAX | Une ligne de code supplémentaire, sur le même DataFrame |
| Résultat de l'agrégation | Un objet spécifique (TCD), pas une plage de données classique | Un DataFrame, identique à n'importe quelle autre donnée |
| Réaction à un changement de source | Rafraîchissement manuel, formules à réajuster | Il suffit de relancer le script |
| Nombre d'interfaces et de langages nécessaires | Jusqu'à trois : Excel, Power Pivot, DAX | Un seul : Python et pandas |
En résumé
- Un TCD basique ne pose aucun problème sous Excel.
- Ajouter une colonne calculée à l'agrégation devient vite fastidieux : formule fragile, ou Power Pivot et son langage DAX.
- En pandas, le résultat d'une agrégation reste un DataFrame comme un autre : ajouter une colonne, c'est une ligne de code, jamais un cas particulier.
- Le script s'adapte automatiquement à tout changement de source, sans réajustement manuel.
Retrouvez l'ensemble de nos articles sur Python pour les métiers.