You need to enable JavaScript to run this app. pandas按指定列组沿行(axis=1)求和循环生成汇总列的实现
优惠活动
大模型
产品
解决方案
定价
更多

pandas按指定列组沿行(axis=1)求和循环生成汇总列的实现

Pandas 指定多组列的行向求和实现方案

原代码的错误点

DataFrame.sum()方法本身没有columns这个传入参数,无法直接在求和方法里指定需要计算的列范围。正确的实现逻辑是先筛出对应列的子集,再对这个子集执行行向求和。

基础可运行版本(匹配你的需求)

完全对应「遍历二维列表、逐次生成trial0/trial1命名的求和列」的逻辑,修正后的代码如下:

import pandas as pd

# 初始化原DataFrame
base_columns = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R']
df = pd.DataFrame(columns=base_columns)

sample_list = [['A','B','C'], ['D','E','F'], ['G','H','I'], ['J','K','L'], ['M','N','O'], ['P','Q','R']]

for idx, col_group in enumerate(sample_list):
    # 先筛选当前组对应的所有列,再做行向求和
    df[f'trial{idx}'] = df[col_group].sum(axis=1)

代码运行逻辑说明:

  • 逐次遍历sample_list的每个子列表,用df[col_group]取出当前子列表指定的列组成临时数据块
  • 对临时数据块执行sum(axis=1),即可得到每行上这几列的求和结果,赋值给命名规则为trial{编号}的新列

高性能优化版本

如果你的分组数量达到上百个、且原DataFrame行数较多,逐列赋值的循环会产生不必要的性能损耗,可以通过字典批量构造新列再一次性合并,运行速度会有明显提升:

# 批量构造所有新列的键值对
new_col_map = {}
for idx, col_group in enumerate(sample_list):
    new_col_map[f'trial{idx}'] = df[col_group].sum(axis=1)

# 一次性合并所有新列到原DataFrame
df = pd.concat([df, pd.DataFrame(new_col_map)], axis=1)

常见问题提示

  • 如果子列表里的列名不在原df的列范围内,会直接触发KeyError,建议正式运行前先做一次列名匹配校验
  • 如果需要处理空值场景,可以在sum方法中加入min_count=1参数,避免全空的列组求和结果被默认填充为0,用法为df[col_group].sum(axis=1, min_count=1)
  • 用空结构的DataFrame测试这段代码时,由于没有实际数值行,生成的trial列会是空值,属于正常现象,替换为实际业务数据后即可正常计算求和结果

内容的提问来源于stack exchange,提问作者Shion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 18:06:03