Pandas groupby.agg()-Funktion
groupby.agg()Es ist eine der leistungsfähigsten Aggregationsfunktionen in Pandas und ermöglicht es Ihnen, mehrere verschiedene Aggregationsfunktionen gleichzeitig auf gruppierte Daten anzuwenden.
undsum()、mean()Im Gegensatz zu einzelnen Aggregationsfunktionen wie sum, mean usw.,agg()kann sie mehrere statistische Kennzahlen gleichzeitig berechnen, wie die Summe, den Mittelwert, das Maximum, das Minimum usw. für jede Gruppe.
In der Datenanalyse ist es oft notwendig, mehrere statistische Analysen gleichzeitig mit Daten durchzuführen,agg()und diese Funktion kann den Prozess kompakt und effizient gestalten.
Grundlegende Syntax und Parameter
agg()Es ist eine Memberfunktion des GroupBy-Objekts; Sie müssen zuerstgroupby()groupby() verwenden, um die Daten zu gruppieren, und es dann aufrufen.
Syntaxformat
GroupBy.agg(func=None, axis=0, *args, engine=None, engine_kwargs=None, **kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung | Standardwert |
|---|---|---|---|
| func | str, list, dict oder callable | Aggregationsfunktion. Sie kann ein einzelner Funktionsname, eine Liste von Funktionen oder ein Wörterbuch sein, das verschiedene Funktionen für jede Spalte angibt. | Keine |
| axis | int | Die Achsenrichtung für die Anwendung der Aggregation; 0 bedeutet nach Zeile (Gruppierungsdimension) und 1 bedeutet nach Spalte. | 0 |
| args | tuple | Zusätzliche Positionsargumente, die an die Aggregationsfunktion übergeben werden. | () |
| engine | str | Gibt die Berechnungs-Engine an, die 'cython' oder 'numba' sein kann. None bedeutet, dass Pandas automatisch wählt. | Keine |
| engine_kwargs | dict | Ein Wörterbuch mit zusätzlichen Parametern, die an die zugrunde liegende Engine übergeben werden. | Keine |
Rückgabewert
- Rückgabetyp:
SeriesoderDataFrame - Beschreibung: Gibt das Ergebnis nach der gruppierten Aggregation zurück; die Ergebnisstruktur hängt vom Parameter func und der Gruppierungsmethode ab.
Beispiel
Lassen Sie uns durch eine Reihe von Beispielen von einfach bis komplex gründlich meistern,groupby.agg()die Verwendung von agg().
Beispiel 1: Integrierte Aggregationsfunktionen verwenden
Der einfachste Weg ist, direkt die Namen der integrierten Pandas-Aggregationsfunktionen wie 'sum', 'mean', 'max', 'min', 'count' usw. zu verwenden.
Beispiel
# Erstelle einen Verkaufsdaten-DataFrame
data = {
'Region': ['Nordchina', 'Ostchina', 'Südchina', 'Nordchina', 'Ostchina', 'Südchina', 'Nordchina', 'Ostchina'],
'Product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
'Sales': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
'Menge': [10, 20, 15, 18, 22, 16, 12, 21]
}
df = pd.DataFrame(data)
print(Ursprüngliche Verkaufsdaten:)
print(df)
print()
# Nach 'Region' gruppieren und mehrere Aggregationsfunktionen auf die Spalte 'Sales' anwenden
# Verwende eine Liste von Zeichenfolgen, um mehrere Aggregationsfunktionen anzugeben
result = df.groupby('Region')['Sales'].agg(['sum', 'mean', 'max', 'min', 'count'])
print(Zusammenfassende Statistik der Verkäufe nach Region:)
print(result)
print()
# Aggregiere sowohl die Spalten 'Sales' als auch 'Quantity'
result_all = df.groupby('Region').agg({
'Sales': ['sum', 'mean'],
'Quantity': ['sum', 'mean']
})
print(Umfassende Statistiken zu Verkäufen und Menge nach Region:)
print(result_all)
Ausgabe:
原始销售数据:
地区 产品 销售额 数量
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
Code-Erklärung:
['sum', 'mean', 'max', 'min', 'count']Die Verwendung einer Liste ermöglicht es, mehrere Aggregationsfunktionen gleichzeitig anzugeben.- Das zurückgegebene Ergebnis ist ein DataFrame, wobei die Spaltennamen aus den Funktionsnamen und den ursprünglichen Spaltennamen zusammengesetzt sind (mehrstufiger Spaltenindex).
- Die Verwendung eines Wörterbuchs ermöglicht es, unterschiedliche Aggregationsfunktionen für verschiedene Spalten anzugeben.
Beispiel 2: Benutzerdefinierte Aggregationsfunktionen verwenden
Zusätzlich zu integrierten Funktionen,agg()Es unterstützt außerdem benutzerdefinierte Funktionen, was seine Flexibilität erheblich erweitert.
Beispiel
import numpy as np
# Schülernotendaten erstellen
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'],
'Chinesisch': [85, 92, 78, 88, 95, 82, 90, 87],
'Mathematik': [90, 85, 92, 78, 88, 91, 85, 89]
}
df = pd.DataFrame(data)
print(Schülernotendaten:)
print(df)
print()
# Benutzerdefinierte Aggregationsfunktionen definieren
def range_func(x):
"""Berechnet die Differenz zwischen dem Maximal- und Minimalwert (Spannweite)"""
return x.max() - x.min()
def coefficient_of_variation(x):
"""Berechnet den Variationskoeffizienten (Standardabweichung / Mittelwert)"""
return x.std() / x.mean() * 100
# Benutzerdefinierte Funktionen für die Aggregation verwenden
# Sie können den Funktionsnamen (String) verwenden oder direkt das Funktionsobjekt übergeben
result = df.groupby('Class').agg({
'Chinese': ['sum', 'mean', range_func], # Für Chinese: sum, mean, Spannweite
'Math': ['sum', 'mean', coefficient_of_variation] # Für Math: sum, mean, Variationskoeffizient
})
print(Benutzerdefinierte Statistiken für jede Klasse:)
print(result)
print()
# Sie können benutzerdefinierte Funktionen auch direkt in einer Liste verwenden
result2 = df.groupby('Class')['Math'].agg(['mean', range_func, 'std'])
print(Statistiken der Mathematik-Ergebnisse für jede Klasse (einschließlich benutzerdefinierter Spannweite und Standardabweichung):)
print(result2)
Ausgabe:
学生成绩数据:
班级 姓名 语文 数学
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
Code-Erklärung:
- Eine benutzerdefinierte Funktion erhält eine Series als Parameter und gibt einen skalaren Wert zurück.
- Funktionsnamen können als Strings übergeben werden (z. B.,
'sum'), oder Sie können das Funktionsobjekt direkt übergeben. - Mit benutzerdefinierten Funktionen können Sie beliebig komplexe Aggregationslogik implementieren.
Beispiel 3: Verwenden von String-Aliasnamen und Lambda-Funktionen
agg()Es unterstützt mehrere Möglichkeiten zum Angeben von Funktionen, einschließlich Lambda-Ausdrücken und integrierten String-Aliasnamen.
Beispiel
# Mitarbeitergehaltsdaten erstellen
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],
'Dienstjahre': [2, 5, 3, 8, 1, 6, 2, 7]
}
df = pd.DataFrame(data)
print(Mitarbeitergehaltsdaten:)
print(df)
print()
# Verwenden Sie Lambda-Funktionen für flexible benutzerdefinierte Berechnungen
# Berechnen Sie die Differenz zwischen dem Median- und dem Durchschnittsgehalt für jede Abteilung
result = df.groupby('Department').agg({
'Salary': [
('Durchschnittsgehalt', 'mean'), # Vergeben Sie Aliase für die Aggregationsergebnisse
('Maximalgehalt', 'max'),
('Minimalgehalt', 'min'),
('Gehaltsspanne', lambda x: x.max() - x.min())
],
'Dienstjahre': [
('Durchschnittliche Dienstjahre', 'mean'),
('Maximale Dienstjahre', 'max'),
('Minimale Dienstjahre', 'min')
]
})
print(Umfassende Statistiken zu Gehalt und Dienstjahren für jede Abteilung:)
print(result)
print()
# Verwende die Kurzform von agg
result2 = df.groupby('Department')['Salary'].agg(
Average='mean',
Sum='sum',
Count='count'
)
print(Aggregationsergebnis mit benannten Parametern:)
print(result2)
Ausgabe:
员工工资数据:
部门 岗位 工资 工龄
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
Code-Erklärung:
- Verwendung eines Tupels
('Alias', 'Function Name')Sie können einen benutzerdefinierten Namen für die Spalte mit dem Aggregationsergebnis angeben. - Lambda-Ausdrücke können direkt verwendet werden in
agg()um einfache benutzerdefinierte Logik zu implementieren. - Die benannte Parameterform (Schlüsselwortargumente) ermöglicht es Ihnen, Namen für die Ergebnisspalten intuitiver anzugeben.
Beispiel 4: Gruppierung nach mehreren Spalten und Verwendung von agg
agg()Es kann auch zusammen mit einer Gruppierung nach mehreren Spalten verwendet werden, um komplexere Anforderungen der Datenanalyse zu bewältigen.
Beispiel
# Umsatzdaten erstellen
data = {
'Region': ['Nordchina', 'Ostchina', 'Südchina', 'Nordchina', 'Ostchina', 'Südchina', 'Nordchina', '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("Verkaufsdaten:")
print(df)
print()
# Gruppieren nach Region und Produkt, mehrere Aggregationen für Umsatz und Gewinn durchführen
result = df.groupby(['Region', 'Product']).agg({
'Sales': ['sum', 'mean', 'count'],
'Profit': ['sum', 'mean']
})
print("Aggregationsergebnisse gruppiert nach Region und Produkt:")
print(result)
print()
# reset_index verwenden, um in ein reguläres DataFrame-Format zu konvertieren
result_flat = df.groupby(['Region', 'Product'], as_index=False).agg({
'Sales': ['sum', 'mean'],
'Profit': ['sum', 'mean']
})
# MultiIndex-Spalten abflachen
result_flat.columns = ['_'.join(col).strip('_') for col in result_flat.columns.values]
print("Abgeflachtes Ergebnis:")
print(result_flat)
Ausgabe:
销售数据:
地区 产品 销售额 利润
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
Codeanalyse:
- Das Gruppieren nach mehreren Spalten erzeugt einen MultiIndex.
- Verwenden Sie
as_index=Falsekönnen die Gruppierungsspalten als normale Spalten beibehalten werden. - Durch
columnsDas Umbenennen kann den mehrstufigen Spaltenindex zu einer einzigen Ebene abflachen.
Hinweis:
agg()Es ist eine der am häufigsten verwendeten Funktionen bei der Gruppierungsaggregation. Sie kann mehrere statistische Kennzahlen auf einmal berechnen und unterstützt auch benutzerdefinierte Funktionen, was sie sehr flexibel macht. Es wird empfohlen, ihre verschiedenen Verwendungsmöglichkeiten in realen Projekten zu beherrschen.
Andere Erweiterungen