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

如何在Pandas中对相邻列两两求和并生成结果列?

Pandas实现相邻列两两分组求和的高效方法

针对你670列、2856行的大数据集,推荐用Pandas向量化操作实现,避免循环带来的性能损耗,以下是两种可靠方案:

方案一:按列分组求和

利用列索引生成分组键,直接对列分组后求和,代码简洁且高效:

import pandas as pd
import numpy as np

# 生成分组键:每两列归为一组(0对应第1-2列,1对应第3-4列...)
group_keys = np.repeat(range(len(df.columns)//2), 2)[:len(df.columns)]
# 按分组键对列求和
result = df.groupby(group_keys, axis=1).sum()
# 重命名结果列(按原列名拼接,比如ID1+ID2→ID12)
result.columns = [f"{df.columns[2*i]}{df.columns[2*i+1]}" for i in range(len(result.columns))]

方案二:奇偶列直接相加

和你提供的R语言逻辑类似,直接选取奇数列和偶数列对应相加,逻辑更直观:

# 选取所有奇数位置的列(第1、3、5...列,索引从0开始)
cols_odd = df.iloc[:, ::2]
# 选取所有偶数位置的列(第2、4、6...列)
cols_even = df.iloc[:, 1::2]
# 两部分列对应相加
result = cols_odd.add(cols_even.values)
# 重命名列(可根据需求调整命名规则)
result.columns = [f"{col_left}{col_right}" for col_left, col_right in zip(cols_odd.columns, cols_even.columns)]

你的代码问题分析

你之前的循环代码之所以得不到预期结果,是因为:

  • 先遍历行再遍历列,把所有求和结果按顺序append成了一维列表
  • 最后转成DataFrame时,所有数据会被放到一列,而不是按行排列成多列
  • 循环遍历行的方式对大数据集性能极差,完全没必要

示例验证

用你提供的示例数据测试:

df = pd.DataFrame(
    {"ID1": [0,0], "ID2": [1,0], "ID3": [0,1], "ID4": [1,1]},
    index=["First", "Second"]
)
# 用方案二执行后,结果如下:
        ID12  ID34
First      1     1
Second     0     2

完全符合预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:55:31