Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 11 / Pratique

Groupby et jointures simples

Agréger par groupe et enrichir sans dupliquer.

◷ 15 minutesTravail sur votre machine

Énoncé

Depuis data/colis_bruts.csv, calculez le prix moyen et le nombre de commandes par transporteur. Construisez ensuite un petit référentiel fictif qui associe chaque transporteur à une zone et joignez-le au CSV. À ce stade, les doublons sont encore présents : notez leur effet sur les comptes. Refaites le groupement après clean.py.

Contraintes

Vérifiez les clés avant de joindre : un seul enregistrement par nom dans le référentiel, aucune multiplication silencieuse des lignes. La zone ajoutée ici est pédagogique, pas une propriété réelle des transporteurs.

Indices

df.groupby("transporteur")["prix_eur"].agg(["mean", "count"]). pd.merge(..., on="transporteur", how="left", validate="m:1") exige une correspondance plusieurs-vers-un.

Correction disponibleCherchez d’abord par vous-même.Voir la correction

Correction

import pandas as pd
colis = pd.read_csv("data/colis_bruts.csv")
transporteurs = pd.DataFrame({
    "transporteur": ["Alpha", "Beta", "Gamma"],
    "zone_fictive": ["nord", "centre", "sud"],
})
assert transporteurs["transporteur"].is_unique
stats = colis.groupby("transporteur")["prix_eur"].agg(["mean", "count"])
print(stats)
enrichi = pd.merge(
    colis, transporteurs, on="transporteur", how="left", validate="m:1"
)
assert len(enrichi) == len(colis)
assert enrichi["zone_fictive"].notna().all()

La jointure ajoute une description, mais ne nettoie pas les commandes. Si validate lève, la clé du référentiel n'est pas unique : corrigez-la avant de modéliser. Une jointure qui multiplie les lignes gonfle le train et fausse toutes les métriques.