在 pandas
中,按多列进行聚合是一个常见的需求。你可以使用 groupby
方法来实现这一点。下面是一个具体的例子,展示如何按两列进行聚合,并应用不同的聚合函数。
假设我们有一个包含公司、部门和销售额的 DataFrame
:
import pandas as pd
data = {
'Company': ['Google', 'Google', 'Microsoft', 'Microsoft', 'Facebook', 'Facebook', 'Google'],
'Department': ['Sales', 'Sales', 'HR', 'HR', 'Engineering', 'Engineering', 'HR'],
'Person': ['Sam', 'Charlie', 'Amy', 'Vanessa', 'Carl', 'Sarah', 'John'],
'Sales': [200, 120, 340, 124, 243, 350, 150]
}
df = pd.DataFrame(data)
按两列进行分组并聚合
1. 单一聚合函数
如果你想按 Company
和 Department
进行分组,并计算每个组的销售额总和,可以这样做:
grouped = df.groupby(['Company', 'Department'])['Sales'].sum().reset_index()
print(grouped)
输出结果可能如下:
Company Department Sales
0 Facebook Engineering 593
1 Google HR 150
2 Google Sales 320
3 Microsoft HR 464
2. 多个聚合函数
如果你想按 Company
和 Department
进行分组,并同时计算每个组的销售额总和和平均值,可以使用 agg
方法:
grouped = df.groupby(['Company', 'Department'])['Sales'].agg(['sum', 'mean']).reset_index()
print(grouped)
输出结果可能如下:
Company Department sum mean
0 Facebook Engineering 593 296.5
1 Google HR 150 150.0
2 Google Sales 320 160.0
3 Microsoft HR 464 232.0
3. 多列聚合
如果你还想对其他列进行聚合,可以在 groupby
方法中指定多列,并在 agg
方法中为每一列指定不同的聚合函数:
grouped = df.groupby(['Company', 'Department']).agg({
'Sales': ['sum', 'mean'],
'Person': 'count'
}).reset_index()
print(grouped)
输出结果可能如下:
Company Department Sales Person
sum mean count
0 Facebook Engineering 593 296.5 2
1 Google HR 150 150.0 1
2 Google Sales 320 160.0 2
3 Microsoft HR 464 232.0 2
解释
groupby(['Company', 'Department'])
:按Company
和Department
两列进行分组。['Sales']
:选择要聚合的列。agg(['sum', 'mean'])
:对Sales
列应用sum
和mean
聚合函数。agg({'Sales': ['sum', 'mean'], 'Person': 'count'})
:对Sales
列应用sum
和mean
聚合函数,对Person
列应用count
聚合函数。reset_index()
:将分组后的结果转换为普通的DataFrame
,方便查看和进一步处理。
希望这些示例能帮助你理解如何在 pandas
中按多列进行聚合。如果有更多问题或需要进一步的帮助,请告诉我!