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. 单一聚合函数

如果你想按 CompanyDepartment 进行分组,并计算每个组的销售额总和,可以这样做:

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. 多个聚合函数

如果你想按 CompanyDepartment 进行分组,并同时计算每个组的销售额总和和平均值,可以使用 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']):按 CompanyDepartment 两列进行分组。
  • ['Sales']:选择要聚合的列。
  • agg(['sum', 'mean']):对 Sales 列应用 summean 聚合函数。
  • agg({'Sales': ['sum', 'mean'], 'Person': 'count'}):对 Sales 列应用 summean 聚合函数,对 Person 列应用 count 聚合函数。
  • reset_index():将分组后的结果转换为普通的 DataFrame,方便查看和进一步处理。

希望这些示例能帮助你理解如何在 pandas 中按多列进行聚合。如果有更多问题或需要进一步的帮助,请告诉我!