Python

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.127
PandasgroupbytransformOutliers

Snippets liés

Retour au Data Lab