pandas多列groupby求和去重时报索引不兼容错误如何解决
报错原因与解决方案
报错原因
你执行的groupby.sum()返回的是一个以所有分组列为索引的聚合Series,行数和原DataFrame完全不一致,索引无法对齐,因此直接赋值给原DataFrame的列时会触发类型不匹配错误。
解决方案
根据你的需求(生成去重后分组求和的新表),优先使用as_index=False参数控制分组列不转为索引,直接输出符合预期结构的结果:
# 适配你的业务字段的代码示例 df_new = df.groupby( ['Month', 'Client', 'ClientName', 'DestinationCountry', 'Region', 'Client Group', 'Grade', 'Family', 'VIPE', 'Segment', 'Sub-segment'], as_index=False )['Volume(t)'].sum()
如果需要把分组求和的结果回填到原DataFrame的每一行(同分组所有行都显示求和值),可以用transform方法,返回结果长度和原DataFrame一致,不会出现索引不匹配问题:
df['Volume(t)_sum'] = df.groupby( ['Month', 'Client', 'ClientName', 'DestinationCountry', 'Region', 'Client Group', 'Grade', 'Family', 'VIPE', 'Segment', 'Sub-segment'] )['Volume(t)'].transform('sum') # 后续如果要去重保留单条记录,再执行去重即可 df_unique = df.drop_duplicates( ['Month', 'Client', 'ClientName', 'DestinationCountry', 'Region', 'Client Group', 'Grade', 'Family', 'VIPE', 'Segment', 'Sub-segment'] )
针对你给出的示例数据,替换分组列为['COLUMN A', 'COLUMN B', 'COLUMN C', 'COLUMN D']、求和列为VOLUME后运行,即可得到你贴出的预期输出。
内容的提问来源于stack exchange,提问作者LUCAS XX
相关产品推荐
相关产品推荐

