Pandas groupby.agg()-Funktion

Gängige Pandas-Funktionen


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

import pandas as pd

# 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:

  1. ['sum', 'mean', 'max', 'min', 'count']Die Verwendung einer Liste ermöglicht es, mehrere Aggregationsfunktionen gleichzeitig anzugeben.
  2. Das zurückgegebene Ergebnis ist ein DataFrame, wobei die Spaltennamen aus den Funktionsnamen und den ursprünglichen Spaltennamen zusammengesetzt sind (mehrstufiger Spaltenindex).
  3. 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 pandas as pd
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

import pandas as pd

# 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 inagg()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

import pandas as pd

# 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 Sieas_index=Falsekönnen die Gruppierungsspalten als normale Spalten beibehalten werden.
  • DurchcolumnsDas 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.


Gängige Pandas-Funktionen

Andere Erweiterungen