Fonction groupby.agg() de Pandas

Fonctions courantes de Pandas


groupby.agg()C'est l'une des fonctions d'agrégation les plus puissantes de Pandas, vous permettant d'appliquer plusieurs fonctions d'agrégation différentes à des données groupées en même temps.

etsum()、mean()Contrairement aux fonctions d'agrégation simples telles que sum, mean, etc.,agg()elle peut calculer plusieurs indicateurs statistiques à la fois, comme calculer la somme, la moyenne, le maximum, le minimum, etc. de chaque groupe simultanément.

Dans l'analyse de données, il est souvent nécessaire d'effectuer plusieurs analyses statistiques sur les données en même temps,agg()et cette fonction peut rendre le processus concis et efficace.


Syntaxe de base et paramètres

agg()C'est une fonction membre de l'objet GroupBy ; il faut d'abordgroupby()groupby() pour regrouper les données, puis appeler la

Format de syntaxe

GroupBy.agg(func=None, axis=0, *args, engine=None, engine_kwargs=None, **kwargs)

Description du paramètre

Paramètre Type Description Valeur par défaut
func agg() Fonction d'agrégation. Elle peut être un nom de fonction, une liste de fonctions ou un dictionnaire de fonctions pour chacun Aucune
axis int L'axe d'application de l'agrégation ; 0 signifie par ligne (dimension de regroupement), et 1 signifie par colonne. 0
args tuple Arguments supplémentaires transmis à la fonction d'agrégation. ()
engine str Spécifie le moteur de calcul, qui peut être 'cython' ou 'numba'. None signifie que Pandas choisira automatiquement. Aucune
engine_kwargs dict Un dictionnaire de paramètres supplémentaires transmis au moteur sous-jacent. Aucune

Valeur de retour

  • Type de retour:SeriesouDataFrame
  • Description: Renvoie le résultat après agrégation groupée ; la structure du résultat dépend du paramètre func et de la méthode de regroupement.

Exemple

Maîtrisons à fond, à travers une série d'exemples du plus simple au plus complexe,groupby.agg()l'utilisation de agg().

Exemple 1 : Utilisation des fonctions d'agrégation intégrées

La méthode la plus simple consiste à utiliser directement les noms des fonctions d'agrégation intégrées de Pandas, tels que 'sum', 'mean', 'max', 'min', 'count', etc.

Exemple

import pandas as pd

# Créer un DataFrame de données de ventes
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China'],
    'Product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Sales': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Quantity': [10, 20, 15, 18, 22, 16, 12, 21]
}
df = pd.DataFrame(data)

print(Données de ventes originales :)
print(df)
print()

# Grouper par 'Region' et appliquer plusieurs fonctions d'agrégation à la colonne 'Sales'
# Utiliser une liste de chaînes de caractères pour spécifier plusieurs fonctions d'agrégation
result = df.groupby('Region')['Sales'].agg(['sum', 'mean', 'max', 'min', 'count'])

print(Statistiques récapitulatives des ventes par région :)
print(result)
print()

# Agréger à la fois les colonnes 'Sales' et 'Quantity'
result_all = df.groupby('Region').agg({
    'Sales': ['sum', 'mean'],
    'Quantity': ['sum', 'mean']
})

print(Statistiques complètes des ventes et des quantités par région :)
print(result_all)

Sortie :

原始销售数据:
  地区  产品   销售额   数量
0  华北   A   1000    10
1  华东   B   2000    20
2  华南   C   1500    15
3  华北   B   1800    18
4  华东   A   2200    22
5  华南   C   1600    16
6  华北   A   1200    12
7  华东   B   2100    21

每个地区销售额的汇总统计:
        sum    mean   max   min  count
地区
华东  7100  1775.0  2200  2000      4
华南  3100  1550.0  1600  1500      2
华北  4000  1333.333333  1800  1000      3

各地区销售和数量的综合统计:
              销售额         数量
              sum    mean  sum   mean
地区
华东  7100  1775.0   83  20.75
华南  3100  1550.0   31  15.50
华北  4000  1333.333333   40  13.33

Explication du code :

  1. ['sum', 'mean', 'max', 'min', 'count']L'utilisation d'une liste permet de spécifier plusieurs fonctions d'agrégation en même temps.
  2. Le résultat renvoyé est un DataFrame, avec des noms de colonnes composés des noms de fonctions et des noms de colonnes d'origine (index de colonnes à plusieurs niveaux).
  3. L'utilisation d'un dictionnaire permet de spécifier différentes fonctions d'agrégation pour différentes colonnes.

Exemple 2 : Utilisation de fonctions d'agrégation personnalisées

En plus des fonctions intégrées,agg()il prend également en charge les fonctions personnalisées, ce qui étend considérablement sa flexibilité.

Exemple

import pandas as pd
import numpy as np

# Créer des données de notes d'étudiants
data = {
    'Class': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'A'],
    'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Sun Qi', 'Zhou Ba', 'Wu Jiu', 'Zheng Shi'],
    'Chinois': [85, 92, 78, 88, 95, 82, 90, 87],
    'Maths': [90, 85, 92, 78, 88, 91, 85, 89]
}
df = pd.DataFrame(data)

print(Données de notes d'étudiants :)
print(df)
print()

# Définir des fonctions d'agrégation personnalisées
def range_func(x):
    """Calcule la différence entre les valeurs maximale et minimale (étendue)"""
    return x.max() - x.min()

def coefficient_of_variation(x):
    """Calcule le coefficient de variation (écart-type / moyenne)"""
    return x.std() / x.mean() * 100

# Utiliser des fonctions personnalisées pour l'agrégation
# Vous pouvez utiliser le nom de la fonction (chaîne) ou passer directement l'objet fonction
result = df.groupby('Class').agg({
    'Chinese': ['sum', 'mean', range_func],  # Pour Chinese : sum, mean, range
    'Math': ['sum', 'mean', coefficient_of_variation]  # Pour Math : sum, mean, coefficient de variation
})

print(Statistiques personnalisées pour chaque classe :)
print(result)
print()

# Vous pouvez également utiliser directement des fonctions personnalisées dans une liste
result2 = df.groupby('Class')['Math'].agg(['mean', range_func, 'std'])
print(Statistiques des notes de mathématiques pour chaque classe (y compris l'étendue personnalisée et l'écart type) :)
print(result2)

Sortie :

学生成绩数据:
   班级  姓名  语文  数学
0  A   张三   85   90
1  A   李四   92   85
2  A   王五   78   92
3  B   赵六   88   78
4  B   孙七   95   88
5  B   周八   82   91
6  B   吴九   90   85
7  A   郑十   87   89

各班级的自定义统计:
               语文                 数学
              sum   mean range_func  sum    mean coefficient_of_variation
班级
A    342  85.5  14.0  425   88.25  5.019099

B    355  88.75  12.0  342   85.5  7.030

各班级数学成绩的统计(包含自定义极差和统计):
班级
A    88.25  5.0  2.692582
B    85.50  13.0  6.0

Explication du code :

  • Une fonction personnalisée reçoit une Series comme paramètre et renvoie une valeur scalaire.
  • Les noms de fonctions peuvent être passés sous forme de chaînes (par exemple,'sum'), ou vous pouvez passer directement l’objet fonction.
  • L’utilisation de fonctions personnalisées vous permet d’implémenter une logique d’agrégation arbitrairement complexe.

Exemple 3 : Utilisation d’alias de chaînes et de fonctions lambda

agg()Il prend en charge plusieurs façons de spécifier des fonctions, notamment les expressions lambda et les alias de chaînes intégrés.

Exemple

import pandas as pd

# Créer des données salariales d’employés
data = {
    'Department': ['Sales', 'Sales', 'Technology', 'Technology', 'Administration', 'Administration', 'Sales', 'Technology'],
    'Position': ['Specialist', 'Manager', 'Specialist', 'Manager', 'Specialist', 'Manager', 'Specialist', 'Manager'],
    'Salary': [5000, 8000, 7000, 12000, 4500, 9000, 5500, 11000],
    'Years of Service': [2, 5, 3, 8, 1, 6, 2, 7]
}
df = pd.DataFrame(data)

print(Données salariales des employés :)
print(df)
print()

# Utiliser des fonctions lambda pour des calculs personnalisés flexibles
# Calculer la différence entre le salaire médian et le salaire moyen pour chaque département
result = df.groupby('Department').agg({
    'Salary': [
        ('Average Salary', 'mean'),  # Donner des alias aux résultats d'agrégation
        ('Max Salary', 'max'),
        ('Min Salary', 'min'),
        ('Salary Range', lambda x: x.max() - x.min())
    ],
    'Years of Service': [
        ('Average Years of Service', 'mean'),
        ('Max Years of Service', 'max'),
        ('Min Years of Service', 'min')
    ]
})

print(Statistiques complètes du salaire et des années de service pour chaque département :)
print(result)
print()

# Utiliser la forme abrégée de agg
result2 = df.groupby('Department')['Salary'].agg(
Average='mean',
Sum='sum',
Count='count'
)

print(Résultat de l'agrégation avec des paramètres nommés :)
print(result2)

Sortie :

员工工资数据:
  部门   岗位    工资   工龄
0  销售   专员  5000    2
1  销售   经理  8000    5
2  技术   专员  7000    3
3  技术   经理  12000   8
4  行政   专员  4500    1
5  行政   经理  9000    6
6  销售   专员  5500    2
7  技术   经理  11000   7

各部门工资和工龄的综合统计:
                   工资                    工龄
            平均工资  最高工资  最低工资  工资极差  平均工龄  最高工龄  最低工龄
部门
技术   10000.0  12000   7000   5000   6.0    8    3
行政   6750.0   9000    4500   4500   3.5    6    1
销售   6166.666667  8000    5000   3000   3.0    5    1

使用命名参数形式的聚合结果:
          平均     总和   人数
部门
技术    10000.0  30000   3
行政     6750.0  13500   2
销售   6166.666667  18500   3

Explication du code :

  • Utilisation d'un tuple('Alias', 'Function Name')vous pouvez spécifier un nom personnalisé pour la colonne de résultat de l'agrégation.
  • Les expressions lambda peuvent être utilisées directement dansagg()pour implémenter une logique personnalisée simple.
  • La forme avec paramètres nommés (arguments nommés) permet de spécifier plus intuitivement les noms des colonnes de résultat.

Exemple 4 : regroupement par plusieurs colonnes et utilisation d'agg

agg()Il peut également être utilisé avec un regroupement sur plusieurs colonnes pour répondre à des besoins d'analyse de données plus complexes.

Exemple

import pandas as pd

# Créer des données de ventes
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China', 'South China'],
    'Product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B', 'C'],
    'Sales': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100, 1700],
    'profit': [200, 400, 300, 360, 440, 320, 240, 420, 340]
}
df = pd.DataFrame(data)

print("Données de ventes :")
print(df)
print()

# Grouper par région et par produit, effectuer plusieurs agrégations sur les ventes et le profit
result = df.groupby(['Region', 'Product']).agg({
    'Sales': ['sum', 'mean', 'count'],
    'Profit': ['sum', 'mean']
})

print("Résultats d'agrégation groupés par région et par produit :")
print(result)
print()

# Utiliser reset_index pour convertir en un format DataFrame standard
result_flat = df.groupby(['Region', 'Product'], as_index=False).agg({
    'Sales': ['sum', 'mean'],
    'Profit': ['sum', 'mean']
})

# Aplatir les colonnes MultiIndex
result_flat.columns = ['_'.join(col).strip('_') for col in result_flat.columns.values]

print("Résultat aplati :")
print(result_flat)

Sortie :

销售数据:
 地区  产品   销售额   利润
0  华北   A   1000  200
1  华东   B   2000  400
2  华南   C   1500  300
3  华北   B   1800  360
4  华东   A   2200  440
5  华南   C   1600  320
6  华北   A   1200  240
7  华东   B   2100  420
9  华南   C    1700  340

按地区和产品分组后的聚合结果:
              销售额            利润
               sum  mean count   sum  mean
地区 产品
华东 A   2200  2200.0     1  440  440.0
     B   4100  2050.0     2  4100  4100.0
华南 C   3100  1550.0     2  3100  1550.0
华北 A   2200  1100.0     2  440  220.0
     B   1800  1800.0     1  360  360.0

展平后的结果:
   地区  产品  销售额_sum  销售额_mean  利润_sum  利润_mean
0  华东   A        2200      2200.0       440       440.0
1  华东   B        4100   2050.0      820       410.0
2  华南   C        3100   1550.0      660       330.0
3  华北   A        2200   1100.0      440       220.0
4  华北   B        1800   1800.0      360       360.0

Analyse du code :

  • Le regroupement par plusieurs colonnes produit un MultiIndex.
  • Utiliseras_index=Falsepeut conserver les colonnes de regroupement comme des colonnes ordinaires.
  • Encolumnsle renommage peut aplatir l’index de colonnes à plusieurs niveaux en un seul niveau.

Remarque :agg()C’est l’une des fonctions les plus couramment utilisées dans l’agrégation par regroupement. Elle peut calculer plusieurs indicateurs statistiques à la fois et prend également en charge les fonctions personnalisées, ce qui la rend très flexible. Il est recommandé de maîtriser ses différentes utilisations dans des projets réels.


Fonctions courantes de Pandas

Autres extensions