Fonction groupby.agg() 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
# 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 :
['sum', 'mean', 'max', 'min', 'count']L'utilisation d'une liste permet de spécifier plusieurs fonctions d'agrégation en même temps.- 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).
- 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 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
# 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 dans
agg()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
# 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.
- Utiliser
as_index=Falsepeut conserver les colonnes de regroupement comme des colonnes ordinaires. - En
columnsle 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.
Autres extensions