You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas分组聚合:如何对指定前缀列分别计算求和与均值

解决DataFrame分组聚合的KeyError问题

错误原因

你之前的写法核心问题在于:agg() 接受的聚合字典,键必须是单个列名,而非列的元组或列表。你把多个FLAG_列打包成元组作为字典键,会被pandas识别为一个“以该元组命名的列”,自然找不到对应列,触发KeyError。

正确实现方式

方法1:构建标准聚合字典

先分别生成两类列的聚合规则,再合并为完整的聚合字典:

sum_cols = [col for col in df.columns if col.startswith('FLAG_')]
mean_cols = [col for col in df.columns if col.startswith('RESPONSE_')]

# 为每个列指定对应的聚合函数
agg_dict = {}
agg_dict.update({col: 'sum' for col in sum_cols})
agg_dict.update({col: 'mean' for col in mean_cols})

# 执行分组聚合
df = df.groupby('ID').agg(agg_dict)

方法2:简洁的参数展开写法

利用Python字典解包,直接在agg()中传入两类列的聚合规则:

sum_cols = [col for col in df.columns if col.startswith('FLAG_')]
mean_cols = [col for col in df.columns if col.startswith('RESPONSE_')]

df = df.groupby('ID').agg(
    **{col: 'sum' for col in sum_cols},
    **{col: 'mean' for col in mean_cols}
)

方法3:链式分组聚合(适配流水线场景)

如果是数据流水线的一部分,可拆分聚合逻辑后合并结果,可读性和扩展性更强:

sum_cols = [col for col in df.columns if col.startswith('FLAG_')]
mean_cols = [col for col in df.columns if col.startswith('RESPONSE_')]

# 分别聚合两类列
sum_part = df.groupby('ID')[sum_cols].sum()
mean_part = df.groupby('ID')[mean_cols].mean()

# 合并结果
df = sum_part.join(mean_part)

内容的提问来源于stack exchange,提问作者rams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:45:57