Data Analysis

Maîtriser Pandas GroupBy et l’Agrégation : Guide Complet

Spread the love

Pandas est une puissante librairie Python pour la manipulation et l’analyse de données. L’une de ses fonctionnalités les plus fréquemment utilisées est la capacité de grouper les données et d’effectuer des calculs agrégés. Cet article explore différentes méthodes pour calculer efficacement des sommes agrégées après avoir regroupé les données à l’aide de la méthode groupby(), offrant des solutions pour différents niveaux de complexité et de formats de sortie souhaités.

Table des matières :

Sommation de base avec groupby()

La manière la plus simple de calculer la somme d’une colonne après le regroupement est d’utiliser groupby() directement avec la méthode sum() :


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Regroupement par 'Group' et somme de 'Value'
grouped_sum = df.groupby('Group')['Value'].sum()
print(grouped_sum)

Cela produit de manière concise une série avec la somme de ‘Value’ pour chaque groupe.

Agrégations multiples avec agg()

La méthode agg() permet le calcul efficace de plusieurs statistiques agrégées simultanément. Ceci est particulièrement utile lorsque vous avez besoin de plus que la simple somme :


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Calcul de la somme, de la moyenne et du compte pour chaque groupe
aggregated = df.groupby('Group')['Value'].agg(['sum', 'mean', 'count'])
print(aggregated)

Cette seule ligne de code calcule la somme, la moyenne et le nombre de ‘Value’ pour chaque groupe, résultant en un DataFrame.

Agrégation personnalisée avec apply()

Pour des scénarios plus complexes nécessitant une logique d’agrégation personnalisée, la méthode apply() offre une flexibilité maximale. Vous pouvez définir une fonction pour effectuer les calculs souhaités :


import pandas as pd
import numpy as np

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

def custom_agg(x):
    return pd.Series({'sum': x.sum(), 'range': x.max() - x.min()})

# Application de la fonction d'agrégation personnalisée
result = df.groupby('Group')['Value'].apply(custom_agg).reset_index()
print(result)

Ici, une fonction personnalisée calcule à la fois la somme et la plage pour chaque groupe.

Sommes cumulées avec groupby() et cumsum()

Pour obtenir des sommes cumulées au sein de chaque groupe, combinez groupby() avec la méthode cumsum() :


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

# Calcul de la somme cumulée pour chaque groupe
df['Cumulative Sum'] = df.groupby('Group')['Value'].cumsum()
print(df)

Cela ajoute une nouvelle colonne affichant le total courant au sein de chaque groupe.

Reformatage des données avec pivot_table()

Pour une représentation plus visuelle et facilement analysable des données agrégées, notamment lorsqu’il s’agit de plusieurs variables de regroupement, utilisez pivot_table() :


import pandas as pd

data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
        'Category': ['X', 'Y', 'X', 'Y', 'Z', 'X'],
        'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)

pivot_table = pd.pivot_table(df, values='Value', index='Group', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)

Cela crée un tableau croisé dynamique résumant les données, ce qui facilite la comparaison des sommes entre les différentes catégories au sein de chaque groupe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *