如何自动对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
相关产品推荐
相关产品推荐

