AccueilBlogExercice pandas d'entretien
Tests prêts à l'emploi

Exercice pandas d'entretien : un cas réaliste et ses réponses attendues

Cet exercice teste la manipulation de données avec pandas dans un cas d'analyse réaliste. En trois questions progressives, il révèle si le candidat pense « vectorisé », vérifie ses données et sait passer d'un besoin métier à un résultat. Corrigé et signaux inclus.

Data Builder·Juillet 2025·10 min de lecture·Test Python · pandas · entretien

Le fil rouge : chercher les réflexes data, pas la mémoire de la syntaxe. Un bon candidat vérifie ses données, évite les boucles inutiles et sait expliquer ce que fait chaque ligne.

1Le jeu de données

La consigne

Deux DataFrames fournis au candidat.

Un cas e-commerce simple : un DataFrame de commandes et un de clients. Le candidat travaille sur ces deux tables, sans données réelles à charger.

commandes : colonnes = [id, client_id, montant, date_commande, statut] clients : colonnes = [id, pays, date_inscription]

    2Question 1 — Le CA mensuel des commandes payées

    La consigne

    Calcule le chiffre d'affaires par mois, en ne gardant que les commandes payées.

    L'entrée en matière : filtrer, extraire le mois d'une date et agréger. On regarde surtout si le candidat vérifie le type de la colonne date avant de l'utiliser.

    import pandas as pd commandes["date_commande"] = pd.to_datetime(commandes["date_commande"]) ca_mensuel = ( commandes[commandes["statut"] == "payee"] .groupby(commandes["date_commande"].dt.to_period("M"))["montant"] .sum() )
    • Bon réflexe : convertir la colonne date si besoin avant de grouper.
    • Bon signe : filtre sur le statut, groupe par mois, somme le montant.

    3Question 2 — Joindre et analyser par pays

    La consigne

    Quel est le CA payé et le nombre de clients distincts par pays ?

    La jointure entre les deux DataFrames, puis une double agrégation. Le piège classique : compter les commandes au lieu des clients distincts.

    df = commandes[commandes["statut"] == "payee"].merge( clients, left_on="client_id", right_on="id", suffixes=("", "_client")) resultat = df.groupby("pays").agg( ca=("montant", "sum"), clients=("client_id", "nunique"), )
    • Bon réflexe : merge sur client_id, puis agrégation avec nunique() pour les clients.
    • Erreur fréquente : un count() qui compte les commandes, pas les clients uniques.

    4Question 3 — Détecter un comportement anormal

    La consigne

    Repère les clients dont le montant moyen de commande dépasse largement la moyenne globale.

    La question ouverte qui révèle l'esprit critique : il faut définir « largement », gérer les cas limites et ne pas conclure sur un client à une seule commande.

    moyenne_par_client = ( commandes[commandes["statut"] == "payee"] .groupby("client_id") .agg(moyenne=("montant", "mean"), n=("id", "count")) ) seuil = 2 * commandes.loc[commandes["statut"] == "payee", "montant"].mean() anormaux = moyenne_par_client[ (moyenne_par_client["moyenne"] > seuil) & (moyenne_par_client["n"] >= 3) ]
    • Bon signe : le candidat définit un seuil explicite (ex. 2× la moyenne).
    • Bon signe : il écarte les clients à une seule commande (peu significatif).
    • Excellent : il questionne le résultat au lieu de le livrer brut.

    Signal d'alerte : ce qui distingue un senior : il ne se contente pas de sortir une liste, il questionne — « est-ce un vrai signal ou un client à une seule grosse commande ? ». Cet esprit critique vaut plus que la syntaxe.

    5Grille par niveau

    NiveauMaîtrise attendueSignal GONO-GO
    JuniorRéussit Q1Filtre, convertit la date, agrègeBoucle au lieu de vectoriser
    ConfirméRéussit Q2Joint et utilise nunique()Compte les commandes au lieu des clients
    SeniorRéussit Q3 avec un seuil justifiéGère les cas limites, questionne le résultatLivre une liste sans esprit critique
    LeadExplique clairement sa démarcheVulgarise et challenge ses propres résultatsRépond juste sans savoir expliquer

    Vous recrutez un profil data ?

    Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.

    Tester gratuitementRéserver un appel