You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动对DataFrame中每3列求和以生成新列?

批量对DataFrame每3列求和生成新列

问题场景

原始DataFrame结构如下:

ID, Type, a, b, c, d, e, f, etc.
ob1, 1,   1, 2, 3, 4, 5, 6, etc.
ob1, 2,   3, 4, 5, 6, 7, 1, etc.

需要生成每3列求和的新列,输出结果如下:

ID, Type, sum1, sum2,  etc.
ob1, 1,     6,   15,   etc.
ob1, 2,    12,   14,   etc.

由于列数量较多,手动逐个处理效率低,需实现从指定起始位置开始自动完成每3列求和的逻辑。

解决方案(Pandas实现)

以下是基于Pandas的高效实现步骤:

1. 构造/读取原始DataFrame

先构造示例数据:

import pandas as pd

data = {
    'ID': ['ob1', 'ob1'],
    'Type': [1, 2],
    'a': [1, 3],
    'b': [2, 4],
    'c': [3, 5],
    'd': [4, 6],
    'e': [5, 7],
    'f': [6, 1]
}
df = pd.DataFrame(data)

2. 指定起始列并分组

假设从第2列(索引为2,对应列a)开始处理,将后续列按每3个一组划分:

# 获取需要处理的目标列(从索引2开始)
target_cols = df.columns[2:]
# 按每3列一组拆分,生成分组后的列列表
col_groups = [target_cols[i:i+3] for i in range(0, len(target_cols), 3)]

3. 批量生成求和列

遍历每个分组,计算行内求和并命名为sum1、sum2...:

sum_cols = []
for idx, group in enumerate(col_groups, 1):
    # 对当前分组的列按行求和
    sum_col = df[group].sum(axis=1)
    sum_col.name = f'sum{idx}'
    sum_cols.append(sum_col)
# 合并所有求和列为DataFrame
sum_df = pd.concat(sum_cols, axis=1)

4. 合并最终结果

将原DataFrame的标识列(ID、Type)和求和列合并:

result_df = pd.concat([df[['ID', 'Type']], sum_df], axis=1)
print(result_df)

运行后输出结果:

ID  Type  sum1  sum2
0  ob1     1     6    15
1  ob1     2    12    14

关键说明

  • 若起始位置不同,只需修改df.columns[2:]中的索引值即可(比如从第3列开始就用df.columns[3:])
  • 即使列数不是3的整数倍,最后一组不足3列也会正常求和(比如剩余2列则直接求和这2列)

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07