Pandas按除最后一列外所有列分组求和最后列时丢失行如何解决
分组求和异常问题修复方案
核心错误原因
你的代码逻辑存在选择求和列的明显错误:groupby(cols[:-1])已经指定了以前16列为分组依据,后续你选取的[cols[:-1]]是要求对这16个分组列本身执行求和操作。如果前16列为文本、分类等非数值类型,pandas会直接过滤掉无法求和的列,最终就会出现大量行丢失、分组结果不符合预期的问题。
修复后的代码
cols = list(report.columns) # 参数dropna=False避免分组列存在空值时被自动过滤 report = report.groupby(cols[:-1], as_index=False, sort=False, dropna=False)[cols[-1]].sum()
额外注意事项
- 如果执行后仍存在本该合并的行没有合并的情况,检查前16列是否存在隐形格式差异:比如字符串前后带空格、数字存储为字符串类型与数值类型的差异、单元格内含换行符等,可针对字符串列执行
str.strip()做格式清洗后再分组 - 可先提取截图中前两行的小样本单独做分组测试,验证逻辑正确性后再全量执行
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

