Transformer les données après regroupement

Une fois les données regroupées selon une ou plusieurs colonnes, il est souvent nécessaire de modifier ou transformer les valeurs au sein de chaque groupe afin de révéler de nouvelles informations ou d’adapter les données à des analyses spécifiques. Cette étape permet d’appliquer des opérations personnalisées, comme la normalisation, le calcul de statistiques spécifiques, ou la création de nouvelles variables, tout en conservant la structure de regroupement. Elle facilite ainsi une analyse plus approfondie et ciblée des sous-ensembles de données.

Fonctions :

  • groupby('colonne').transform(lambda x: …)

    La méthode transform() permet de transformer les données d'un DataFrame après un regroupement. Elle applique une fonction à chaque groupe créé par groupby(), tout en maintenant la structure du DataFrame d'origine. Cela permet de calculer de nouvelles valeurs ou de modifier les valeurs existantes en fonction de groupes définis. Contrairement à agg() qui retourne une série ou un DataFrame agrégé, transform() conserve la même forme que les données d'origine, mais avec des valeurs modifiées ou calculées.

    Importation :

    import pandas as pd

    Attributs :

    Paramètre Type Description Valeur par défaut
    groupby() function Méthode pour regrouper les données par une ou plusieurs colonnes. None
    transform() function Applique une fonction de transformation à chaque groupe tout en maintenant la structure du DataFrame d'origine. None

    Exemple de code :

    import pandas as pd
    
    # Exemple de DataFrame
    data = {
        'nom': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
        'ville': ['Paris', 'Lyon', 'Paris', 'Lyon', 'Paris'],
        'score': [88, 92, 75, 85, 95]
    }
    df = pd.DataFrame(data)
    
    # Regrouper par 'ville' et transformer les scores pour qu'ils soient normalisés par ville
    grouped = df.groupby('ville')
    
    # Appliquer une transformation pour centrer les scores par ville (soustraction de la moyenne)
    df['score_normalized'] = grouped['score'].transform(lambda x: x - x.mean())
    
    print("DataFrame avec les scores normalisés :")
    print(df)
    Résultat du code

    Explication du code :

    import pandas as pd importe la bibliothèque pandas, renommée ici en pd pour simplifier son utilisation dans le code.

    Exemple de DataFrame

    Le dictionnaire data contient trois clés : 'nom', 'ville', et 'score', chacune associée à une liste de valeurs. Ce dictionnaire est utilisé pour créer un DataFrame df.

    Regrouper par 'ville' et transformer les scores pour qu'ils soient normalisés par ville

    La méthode groupby('ville') permet de regrouper les lignes du DataFrame en fonction de la colonne 'ville'. Cela crée un objet GroupBy qui permet d'appliquer des transformations ou des agrégations sur chaque groupe (ici chaque ville).

    Ensuite, la méthode transform(lambda x: x - x.mean()) est appliquée sur la colonne 'score'. Cette transformation soustrait la moyenne des scores de chaque ville (calculée avec x.mean()) à chaque score individuel du groupe, ce qui a pour effet de centrer les scores autour de zéro pour chaque ville.

    Le résultat de cette transformation est assigné à une nouvelle colonne 'score_normalized' dans le DataFrame df.

    Enfin, print(df) affiche le DataFrame mis à jour, avec une nouvelle colonne qui contient les scores normalisés pour chaque ville.