使用Group By与ILOC时触发ValueError错误的技术求助
解决pandas groupby使用iloc报错的问题
问题根源
直接用df3.iloc[:, :-2]作为groupby分组键会触发报错,因为iloc切片返回的是DataFrame对象,而groupby要求分组依据必须是一维结构(比如列名列表、Series或单个列)。
正确实现方式
你需要先提取目标列的列名列表,再传给groupby,这样就能适配后续新增的列:
# 获取除最后两列外的所有列名 group_cols = df3.columns[:-2].tolist() # 执行分组求和操作 result = df3.groupby(group_cols).sum()
也可以通过iloc先定位列再提取列名,效果一致:
group_cols = df3.iloc[:, :-2].columns.tolist() result = df3.groupby(group_cols).sum()
错误原因解析
当你直接传入df3.iloc[:, :-2]时,pandas会把整个DataFrame当作分组器,但分组器不支持二维结构,因此抛出ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional错误。而传入列名列表时,pandas会明确按指定列的取值进行分组,完全符合分组要求。
内容的提问来源于stack exchange,提问作者Mark Sheppard
相关产品推荐
相关产品推荐

