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

Pandas:DataFrameGroupby多列聚合操作报错求助

解决Pandas分组聚合的TypeError问题

咱们一步步拆解这个报错的原因和解决办法:你遇到的TypeError,本质是因为在多列聚合场景下,你用的agg(Avg=np.average, Sum=np.sum)写法不符合Pandas的参数要求——这种关键字参数的格式只适用于单列的命名聚合,多列时必须明确指定聚合函数对应到哪些列。

正确的解决方案

这里提供两种实用写法,你可以根据需求选择:

方案1:明确指定每列的聚合(自定义列名)

如果你想给每个聚合结果设置清晰的自定义列名(比如Avg_POPESTIMATE2010),可以用这种命名聚合的标准写法,每个关键字对应(目标列名, 聚合函数)的元组:

import numpy as np
import pandas as pd

# 加载并预处理数据
df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV'] == 50]

# 正确的聚合代码
result = df.groupby('STNAME')[['POPESTIMATE2010', 'POPESTIMATE2011']].agg(
    Avg_2010=('POPESTIMATE2010', np.average),
    Sum_2010=('POPESTIMATE2010', np.sum),
    Avg_2011=('POPESTIMATE2011', np.average),
    Sum_2011=('POPESTIMATE2011', np.sum)
)

print(result.head())

方案2:批量对多列应用相同聚合(简洁写法)

如果想让选中的所有列自动应用average和sum两个聚合,可以直接传递聚合函数列表,之后再按需合并多级列名:

import numpy as np
import pandas as pd

df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV'] == 50]

# 批量执行聚合
result = df.groupby('STNAME')[['POPESTIMATE2010', 'POPESTIMATE2011']].agg([np.average, np.sum])

# 合并多级列名为单级(比如把('POPESTIMATE2010', 'average')改成'POPESTIMATE2010_average')
result.columns = ['{}_{}'.format(col, agg) for col, agg in result.columns]

print(result.head())

额外小优化

你原来写的set_index('STNAME').groupby(level=0)可以直接简化成groupby('STNAME'),功能完全一致,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:37:49