Pandas如何按每5列分组求和,处理不足5列的末尾分组?
解决方案:DataFrame按每5列分组求和(支持动态新增列)
问题分析
你之前用loc[1:5].apply(np.sum, axis=1)的问题在于:
- 切片范围固定,无法适配动态新增的列;
- 当末尾列数不足5时,切片会超出有效列范围,导致返回NaN。
可行代码实现
import pandas as pd import numpy as np # 模拟持续新增列的DataFrame(示例为7列) df = pd.DataFrame({ 'Col1': [1,2,3], 'Col2': [4,5,6], 'Col3': [7,8,9], 'Col4': [10,11,12], 'Col5': [13,14,15], 'Col6': [16,17,18], 'Col7': [19,20,21] }) # 生成每列对应的分组标签(每5列一组) group_labels = np.arange(len(df.columns)) // 5 + 1 # 按分组对列求和 sum_df = df.groupby(group_labels, axis=1).sum() # 重命名汇总列 sum_df.columns = [f'Column Sum {i}' for i in sum_df.columns] # 可选:合并原DataFrame与汇总列(若需保留原数据) result_df = pd.concat([df, sum_df], axis=1)
代码说明
- 动态分组:
np.arange(len(df.columns)) //5 +1会自动给每一列分配分组编号,不管后续新增多少列,都会按每5列一组的规则划分,末尾不足5列的部分会自动形成最后一组。 - 正确求和:
groupby(..., axis=1).sum()会对每个分组内的所有列横向求和,无论分组内列数是5还是少于5,都能返回正确结果,不会出现NaN。 - 灵活扩展:后续新增列后,只需重新运行这段代码,就能自动生成新的分组汇总列,无需手动调整切片范围。
内容的提问来源于stack exchange,提问作者Nathan Pared
相关产品推荐
相关产品推荐

