Pandas:使用列表变量执行groupby分组时报错的解决方法
Pandas groupby使用列表变量报错的解决方法
问题场景
我有一个Pandas DataFrame df:
state name age WB Jim 26 CA John 32 CA Jason 14
直接硬编码列名执行分组求最大值的代码可以正常运行:
df2 = df.groupby(['state', 'name'])['age'].max().reset_index()
但当用列表变量代替硬编码列名时:
cols = ['state', 'name'] df2 = df.groupby(cols)['age'].max().reset_index()
出现如下错误:
raise TypeError("You have to supply one of 'by' and 'level'") TypeError: You have to supply one of 'by' and 'level'
解决方法
1. 确认列表变量的类型
这个报错大概率是因为cols变量的类型不是真正的列表——比如它可能被误赋值为字符串、Series或其他不符合要求的类型。先执行以下代码确认类型:
print(type(cols))
确保输出为<class 'list'>,如果不是,重新定义正确的列表:
cols = ['state', 'name']
2. 显式指定by参数
为避免Pandas对参数识别产生歧义,直接显式传入by参数来指定分组列:
cols = ['state', 'name'] df2 = df.groupby(by=cols)['age'].max().reset_index()
这种写法会明确告诉Pandas你要按cols列表中的列进行分组,彻底避免参数识别问题。
内容的提问来源于stack exchange,提问作者aiman
相关产品推荐
相关产品推荐

