df.groupby(‘team‘).agg({...}) 是 Pandas 中一个非常常用的聚合操作
df.groupby('team').agg({...})
是 Pandas 中一个非常常用的聚合操作,它允许你对不同组进行不同的聚合计算。比如在groupby('team')
这个例子中,groupby('team')
按照 team
列对数据进行分组,然后使用 agg
来对每个分组执行多个聚合操作。
解释:
-
df.groupby('team')
:首先,groupby('team')
会根据team
列的不同值将数据分成多个组。例如,假设数据中有三个团队('A'
,'B'
,'C'
),那么数据就会按这些团队分组。 -
agg({...})
:agg
是聚合函数,接受一个字典作为参数,字典中的键是列名,值是要对该列进行的操作。你可以为每一列指定不同的聚合方法。这里的操作有:sum
: 对Q1
列求总和。count
: 对Q2
列求非空值的数量。mean
: 对Q3
列求平均值。max
: 对Q4
列求最大值。
示例:
假设我们有一个类似如下的 DataFrame
:
import pandas as pd
# 创建一个示例 DataFrame
data = {
'team': ['A', 'A', 'B', 'B', 'C', 'C', 'A', 'B', 'C'],
'Q1': [100, 150, 200, 250, 300, 350, 120, 180, 400],
'Q2': [10, 15, 20, 25, 30, 35, 40, 45, 50],
'Q3': [1.2, 3.4, 2.5, 4.1, 6.3, 5.8, 3.3, 4.0, 6.1],
'Q4': [5, 10, 15, 20, 25, 30, 35, 40, 45]
}
df = pd.DataFrame(data)
# 打印原始数据
print(df)
输出:
team Q1 Q2 Q3 Q4
0 A 100 10 1.2 5
1 A 150 15 3.4 10
2 B 200 20 2.5 15
3 B 250 25 4.1 20
4 C 300 30 6.3 25
5 C 350 35 5.8 30
6 A 120 40 3.3 35
7 B 180 45 4.0 40
8 C 400 50 6.1 45
使用 groupby
和 agg
聚合:
result = df.groupby('team').agg({
'Q1': sum, # 对 'Q1' 列求和
'Q2': 'count', # 对 'Q2' 列求计数(非空值的数量)
'Q3': 'mean', # 对 'Q3' 列求平均值
'Q4': max # 对 'Q4' 列求最大值
})
print(result)
输出:
Q1 Q2 Q3 Q4
team
A 370 3 2.3 35
B 630 3 3.5 40
C 1050 3 6.1 45
解释:
-
Q1
:每个团队的总和:- 团队 A 的总和是
100 + 150 + 120 = 370
- 团队 B 的总和是
200 + 250 + 180 = 630
- 团队 C 的总和是
300 + 350 + 400 = 1050
- 团队 A 的总和是
-
Q2
:每个团队的非空值数量(count
),由于每个团队都有 3 行数据,所以每个团队的Q2
列值都是 3。 -
Q3
:每个团队的平均值:- 团队 A 的平均值是
(1.2 + 3.4 + 3.3) / 3 = 2.3
- 团队 B 的平均值是
(2.5 + 4.1 + 4.0) / 3 = 3.5
- 团队 C 的平均值是
(6.3 + 5.8 + 6.1) / 3 = 6.1
- 团队 A 的平均值是
-
Q4
:每个团队的最大值:- 团队 A 的最大值是
35
- 团队 B 的最大值是
40
- 团队 C 的最大值是
45
- 团队 A 的最大值是
小结:
groupby
将数据按team
列分组。agg
允许对每个组执行不同的聚合操作,比如求和、计数、平均值或最大值等。- 每个操作都可以独立应用到指定的列(
Q1
、Q2
、Q3
和Q4
)。