Pandas groupby.mean() Funktion
groupby.mean()ist eine Aggregationsfunktion in Pandas, die verwendet wird, um den Mittelwert nach der Gruppierung zu berechnen. Sie wird zusammen mitgroupby.sum()Verwenden Sie sie zusammen: Gruppieren Sie zuerst die Daten nach den Werten einer Spalte und berechnen Sie dann das arithmetische Mittel der numerischen Spalten in jeder Gruppe.
In der Datenanalyse ist die Berechnung des Mittelwerts ein sehr häufiger Bedarf. Zum Beispiel die Berechnung des durchschnittlichen Gehalts pro Abteilung, des durchschnittlichen Umsatzes pro Region, der durchschnittlichen Punktzahl pro Klasse usw.mean()Die Funktion kann diese Aufgaben schnell erledigen.
Grundlegende Syntax und Parameter
mean()ist eine Member-Funktion des GroupBy-Objekts; Sie müssen zuerstgroupby()rufen Sie sie dann nach der Gruppierung auf.
Syntaxformat
GroupBy.mean(numeric_only=False, engine=None, engine_kwargs=None)
Parameterbeschreibung
| Parameter | Type | Beschreibung | Standardwert |
|---|---|---|---|
| numeric_only | bool | Wenn True, wird nur der Mittelwert für numerische Spalten berechnet; wenn False, wird versucht, den Mittelwert für alle Spalten zu berechnen. | False |
| engine | str | Gibt die Berechnungs-Engine an, die 'cython' oder 'numba' sein kann. None bedeutet, dass Pandas automatisch auswä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 gruppenweisen Mittelwertberechnung zurück. Bei Verwendung auf einer einzelnen Spalte wird eine Series zurückgegeben; bei Verwendung auf mehreren Spalten wird ein DataFrame zurückgegeben.
Beispiele
Gehen wir eine Reihe von Beispielen von einfach bis komplex durch, um sie gründlich zu meisterngroupby.mean()die Verwendung von.
Beispiel 1: Grundlegende Verwendung - Gruppieren nach einer einzelnen Spalte und Berechnen des Mittelwerts
Die grundlegendste Verwendung besteht darin, nach den Werten einer Spalte zu gruppieren und dann den Mittelwert einer anderen Spalte zu berechnen.
Beispiel
# Erstelle einen DataFrame mit Schülernotendaten
# Enthält Schülername, Klasse, Chinesisch-, Mathematik- und Englisch-Noten
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', Sun Qi, Zhou Ba, Wu Jiu, Zheng Shi],
Klasse: ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'A'],
Chinesisch: [85, 92, 78, 88, 95, 82, 90, 87],
Mathematik: [90, 85, 92, 78, 88, 91, 85, 89],
Englisch: [88, 90, 85, 92, 87, 89, 91, 86]
}
# Erstelle den DataFrame
df = pd.DataFrame(data)
print("Schülernotendaten:")
print(df)
print()
# Gruppiere nach "班level" und berechne die Durchschnittsnote für jede Klasse
avg_by_class = df.groupby(Class).mean(numeric_only=True)
print(Durchschnittsnote pro Klasse:)
print(avg_by_class)
print()
# Sie können auch den Mittelwert für nur eine einzelne Spalte berechnen
math_avg_by_class = df.groupby(Class)[Mathematics].mean()
print(Durchschnittliche Mathe-Punktzahl für jede Klasse:)
print(math_avg_by_class)
Erwartete Ausgabe:
学生成绩数据:
姓名 班级 语文 数学 英语
0 张三 A 85 90 88
1 李四 A 92 85 90
2 王五 A 78 92 85
3 赵六 B 怎么办 78 92
4 孙七 B 95 88 87
5 周八 B 82 91 89
6 吴九 B 90 85 91
7 郑十 A 87 89 86
每个班级的平均成绩:
语文 数学 英语
班级
A 85.500000 89.000000 87.250000
B 88.750000 85.500000 89.750000
每个班级的数学平均成绩:
班级
A 89.0
B 85.5
dtype: float64
Code-Erklärung:
df.groupby('班级')Gruppiert Schüler anhand der Werte in der Spalte "班level" in die Gruppen A und B..mean(numeric_only=True)Berechnet den Mittelwert für alle numerischen Spalten (Chinese, Math, English).- Im zurückgegebenen Ergebnis dient die Klasse als Index, und die Mittelwerte jedes Fachs dienen als Spaltendaten.
Beispiel 2: Nach mehreren Spalten gruppieren und den Mittelwert berechnen
Sie können gleichzeitig nach mehreren Spalten gruppieren und dann den Mittelwert der numerischen Spalten berechnen.
Beispiel
# Umsatzdaten erstellen
data = {
'Region': ['Nordchina', 'Ostchina', 'Südchina', 'Nordchina', 'Ostchina', 'Südchina', 'Nordchina', 'Ostchina'],
'product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
'Sales amount': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
Profit: [200, 400, 300, 360, 440, 320, 240, 420]
}
df = pd.DataFrame(data)
print("Verkaufsdaten:")
print(df)
print()
# Gruppieren nach "Region" und "Product", durchschnittlichen Umsatz und Gewinn berechnen
avg_grouped = df.groupby(['Region', 'product'], as_index=False).mean(numeric_only=True)
print(Durchschnittlicher Umsatz und Gewinn gruppiert nach Region und Produkt:)
print(avg_grouped)
print()
# Mehrstufige Indexform beibehalten
avg_indexed = df.groupby(['Region', 'product']).mean(numeric_only=True)
print(Ergebnis im mehrstufigen Indexformat:)
print(avg_indexed)
Erwartete Ausgabe:
销售数据:
地区 产品 销售额 利润
0 华北 A 1000 200
1 华东 B 2000 reset_index
2 华南 C 1500 300
3 华北 B 1800 360
4 华东 A 保留 440
5 对齐 C 1600 320
6 华北 A 1200 240
7 华东 B 2100 420
按地区和产品分组后的平均销售额和利润:
地区 产品 销售额 利润
0 华东 A 2200.0 440.结果
1 华东 B 2050.0 410.0
2 华南 C 1550.0 310. 产品
3 华北 A 1100.0 220.0
4 华北 B 1800.0 360.()
多级索引形式的结果:
销售额 利润
地区 产品
华东 A 2200.0 440.0
B 2050.0 410.0
华南 C 1550.0 310.0
华北 A 1100.0 0
B 1800() 360.0
Code-Erklärung:
['Region', 'Product']Wenn eine Liste verwendet wird, um nach mehreren Spalten zu gruppieren,as_index=Falseliegt das Ergebnis im DataFrame-Format vor, und die Gruppierungsspalten werden als gewöhnliche Spalten beibehalten.- Die mehrstufige Indexform ist kompakter und besser für nachfolgende Datenanalyseoperationen geeignet.
Beispiel 3: Berechnung des Mittelwerts beim Umgang mit fehlenden Werten
Wenn im Datenbestand fehlende Werte (NaN) vorhanden sind,mean()ignoriert es diese fehlenden Werte bei der Berechnung automatisch.
Beispiel
import numpy as np
# Mitarbeitergehaltsdaten mit fehlenden Werten erstellen
data = {
'Department': [Sales, Sales, Sales, 'Technology', 'Technology', 'Technology', Administration, Administration],
'salary': [5000, 6000, np.nan, 8000, 9000, np.nan, 4500, np.nan]
}
df = pd.DataFrame(data)
print(Mitarbeitergehaltsdaten (einschließlich fehlender Werte):)
print(df)
print()
# Standardmäßig ignoriert mean() NaN-Werte bei der Berechnung
avg_with_nan = df.groupby('Department')['salary'].mean()
print("Standardmäßig wird der Durchschnitt berechnet (NaN wird ignoriert):")
print(avg_with_nan)
print()
# Wenn Sie NaN-Werte als 0 in die Berechnung einbeziehen möchten, müssen Sie sie zuerst füllen
avg_filled = df.groupby('Department')['salary'].apply(lambda x: x.fillna(0).mean())
print(Durchschnittliches Gehalt, nachdem NaN als 0 behandelt wurde:)
print(avg_filled)
print()
# Verwenden Sie den Parameter skipna (Standard ist True)
# Wenn skipna=False gesetzt ist, geben alle Gruppen, die NaN enthalten, NaN zurück
# Hinweis: Der Mittelwert von groupby hat keinen Parameter skipna, aber ein ähnlicher Effekt kann mit fillna erzielt werden
Erwartete Ausgabe:
员工工资数据(包含缺失值): 部门 工资 0 销售 5000.0 1 销售 6000.0 2 销售 NaN 3 技术 销售 8000.0 4 技术 9000.0 5 技术 NaN 销售 行政 4500 .0 7 行政 NaN 默认计算平均值(忽略NA N): 部门 技术 8500.0 行政 4500.0 销售 5500.0 dtype: float64 将NaN视为0后的平均工资: 部门 技术 5666.666667 行政 2250.0 销售 3666.666667 dtype: float64
Code-Erklärung:
- Standardmäßig,
mean()NaN-Werte werden automatisch ignoriert und sind nicht in die Mittelwertberechnung einbezogen. - Die Vertriebsabteilung hat 2 gültige Werte (5000, 6000) mit einem Durchschnitt von 5500.
- Wenn Sie NaN vor der Berechnung des Mittelwerts als 0 behandeln müssen, können Sie
fillna(0)um zuerst die fehlenden Werte auszufüllen.
Beispiel 4: Kombination von transform zur Berechnung gruppeninterner Anteile
Sie können dietransformtransform-Methode, um den Gruppenmittelwert zurück auf jede Zeile der Originaldaten zu übertragen, was sehr nützlich ist, wenn gruppeninterne Anteile oder Abweichungen vom Gruppenmittelwert berechnet werden.
Beispiel
# Schülernotendaten erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', Sun Qi, Zhou Ba],
Klasse: ['A', 'A', 'A', 'B', 'B', 'B'],
Chinesisch: [85, 92, 78, 88, 95, 82],
Mathematik: [90, 85, 92, 78, 88, 91]
}
df = pd.DataFrame(data)
print("Schülernotendaten:")
print(df)
print()
# Durchschnittliche Mathe-Punktzahl für jede Klasse berechnen und dann auf jede Zeile übertragen
df['Class Math Average'] = df.groupby(Class)[Mathematics].transform('mean')
# Berechne die Differenz zwischen der Punktzahl jedes Schülers und dem Klassendurchschnitt
df['Difference from average score'] = df[Mathematics] - df['Class Math Average']
print("Daten nach dem Hinzufügen von Klassendurchschnitt und Differenz:")
print(df)
print()
# Berechne die Mathematikpunktzahl jedes Schülers als Prozentsatz der Gesamtpunktzahl der Klasse
df['Percentage within class'] = (df[Mathematics] / df['Class Math Average'] * 100).round(2)
print(Daten nach dem Hinzufügen von Prozentsätzen:)
print(df)
Erwartete Ausgabe:
学生成绩数据: 姓名 班级 语文 数学 0 张三 A 85 保持 1 李四 A 92 索引 2 王五 A 索引 3 平均值 赵六 B 计算 78 4 孙七 B 95 88 5 周八 B 82 91 添加班级平均分和差值后的数据: 姓名 班级 语文 数学 班级数学平均分 与平均分差值 0 张三 A 85 90 89.000000 1.000000 1 李四 A 92 85 89.重新分组 -4.000000 3 王五 A 78 92 89.000000 3.000000 4 赵六 B 88 78 85.666667 -7.666667 5 孙七 B 95 88 85.666667 2.333333 6 先 B 82 91 85.666667 5.333333 添加百分比后的数据: 班级 班级 数学 班级数学平均分 与平均分差值 班级内百分比 0 A 10000 90 89.0 1.0 101.12 1 A 0.3 索引
Code-Erklärung:
transform('mean')Es berechnet den Mittelwert jeder Gruppe und überträgt ihn dann zurück auf jede Zeile der ursprünglichen Daten.- Auf diese Weise kann jeder Schüler die Durchschnittspunktzahl der eigenen Klasse erfahren, was den Vergleich erleichtert.
- Diese Methode ist sehr praktisch in Analyseszenarien wie bei der Berechnung von "der Position einer Person innerhalb einer Gruppe".
Notizen:
mean()Die Funktion ignoriert NaN-Werte standardmäßig während der Berechnung. Wenn alle Daten aus fehlenden Werten bestehen, gibt sie NaN zurück. Im Vergleich zusum()anders,mean()es gibt keinmin_countParameter überschrieben werden.
Weitere Erweiterungen