groupby + transform : features alignées sur les lignes
transform renvoie une série de la taille du DataFrame d'origine : idéal pour normaliser chaque ligne par rapport à son groupe.
Cas d'usage
Z-score par catégorie pour détecter les montants anormaux au sein de leur propre segment.
Prérequis
Python 3.9+, pandas
Python
import pandas as pd
g = df.groupby("categorie")["montant"]
# Score z calculé PAR GROUPE, aligné sur les lignes d'origine
df["zscore_grp"] = (df["montant"] - g.transform("mean")) / g.transform("std")
# Part de chaque ligne dans le total de son groupe
df["part_grp"] = df["montant"] / g.transform("sum")
# Lignes anormales au sein de leur propre segment
outliers = df[df["zscore_grp"].abs() > 3]Résultat
>>> outliers[["categorie", "montant", "zscore_grp", "part_grp"]]
categorie montant zscore_grp part_grp
842 informatique 48900.0 3.42 0.118
1217 mobilier 31200.0 3.87 0.094
3406 informatique 52750.0 3.71 0.127PandasgroupbytransformOutliers