Pandas按除指定列外所有列分组求和报错,求解决方法
解决pandas groupby使用columns.difference()引发的ValueError问题
问题原因
report.columns.difference(['Miles Driven'])返回的是pandas Index对象,而非普通列表。当直接将该Index传入groupby()时,pandas会误将其当作行级分组依据(需要与DataFrame行数匹配的序列),但Index的长度是列数,与DataFrame行数不相等,从而触发ValueError: Grouper and axis must be same length错误。
解决方案
将Index对象转换为普通列表,让groupby()明确识别这是要分组的列名列表:
# 将Index转为列表 columns_to_group = list(report.columns.difference(['Miles Driven'])) # 或使用tolist()方法 # columns_to_group = report.columns.difference(['Miles Driven']).tolist() # 执行分组求和 report = report.groupby(columns_to_group).sum().reset_index()
额外说明
columns.difference()会返回排序后的列名,若需要保留原列顺序,可改用列表推导式生成分组列:[col for col in report.columns if col != 'Miles Driven']- 即使打印Index和手动列表的输出看起来一致,但二者类型不同,这是导致问题的核心原因。
内容的提问来源于stack exchange,提问作者Benjamin Schwartz
相关产品推荐
相关产品推荐

