基于另一列对Pandas DataFrame执行groupby、sum和mean操作求助
解决方案
你可以用 pandas 的 groupby 配合 agg() 方法,一次性完成分组、求和、求均值操作,还能给不同列指定不同的聚合逻辑,具体代码如下:
1. 基础导入(若未执行)
import pandas as pd
2. 多列自定义聚合
假设你需要按 Month-Year 分组,对 meets_target 求和、对 percentage 求均值,同时保留每个月的总数量 total,代码如下:
result = mydf.groupby('Month-Year').agg( total_meets=('meets_target', 'sum'), # 对meets_target列求和,命名为total_meets avg_percent=('percentage', 'mean'), # 对percentage列求均值,命名为avg_percent monthly_total=('total', 'first') # total列每组值相同,取第一个即可 ).reset_index()
执行后得到的结果:
| Month-Year | total_meets | avg_percent | monthly_total |
|---|---|---|---|
| Apr-2020 | 67 | 49.995 | 67 |
| May-2020 | 97 | 49.995 | 97 |
| Jun-2020 | 70 | 49.945 | 70 |
3. 同一列多聚合操作
如果需要对同一列同时做求和和均值计算(比如对 meets_target),可以简化写法:
result = mydf.groupby('Month-Year')['meets_target'].agg(['sum', 'mean']).reset_index()
输出结果:
| Month-Year | sum | mean |
|---|---|---|
| Apr-2020 | 67 | 33.5 |
| May-2020 | 97 | 48.5 |
| Jun-2020 | 70 | 35.0 |
关键说明
agg()支持传入字典,通过「新列名: (原列名, 聚合函数)」的格式自定义聚合规则,灵活度很高- 聚合函数可以用字符串(如
'sum'、'mean'),也可以直接用 pandas 内置函数(如pd.Series.sum) - 对于分组内值完全一致的列(比如
granularity_date),用'first'或'last'提取值效率更高
内容的提问来源于stack exchange,提问作者Hayat
相关产品推荐
相关产品推荐

