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

如何系统化地对Pandas数据框中对应组合列求和生成新列

如何系统化地对Pandas数据框中对应组合列求和生成新列

看起来你需要的是对每个原始元素i,求所有包含i的组合列的行和,这个需求完全可以用通用化的方法实现,不用手动写每个f_i的公式。下面是针对这个场景的通用解决方案,不管你是4个元素还是20个元素都能直接用:

核心思路

我们可以先把列名拆分成对应的元素对,然后为每个元素i筛选出所有包含它的列,最后按行求和生成f_i列——整个过程完全自动化,不需要硬编码任何列名。

具体实现代码

先拿你提供的小数据框做测试验证:

import pandas as pd

# 你的测试数据
data = {
    '1_2': [1,4,8,4,8],
    '1_3': [5,3,8,3,0],
    '1_4': [2,4,8,4,7],
    '2_3': [8,5,9,4,4],
    '2_4': [2,8,3,8,2],
    '3_4': [2,5,3,3,2]
}
df = pd.DataFrame(data)

# 1. 解析所有列名,得到每个列对应的元素对(比如"1_2" → (1,2))
column_pairs = [tuple(map(int, col.split('_'))) for col in df.columns]

# 2. 提取所有唯一的原始元素(比如1、2、3、4)
unique_elements = sorted({num for pair in column_pairs for num in pair})

# 3. 循环为每个元素生成f_i列
for i in unique_elements:
    # 筛选出所有列名中包含i的列
    target_cols = [col for col, pair in zip(df.columns, column_pairs) if i in pair]
    # 按行求和,生成f_i列
    df[f'f_{i}'] = df[target_cols].sum(axis=1)

# 查看结果
print(df)

运行后会输出你想要的结果:

1_2  1_3  1_4  2_3  2_4  3_4  f_1  f_2  f_3  f_4
0    1    5    2    8    2    2    8   11   15    6
1    4    3    4    5    8    5   11   17   13   17
2    8    8    8    9    3    3   24   20   20   14
3    4    3    4    4    8    3   11   16   10   15
4    8    0    7    4    2    2   15   14    6   11

直接扩展到20个元素的场景

当你的数据框有20C2=190列时,这段代码完全不需要修改:

  • 列名解析会自动处理所有"i_j"格式的列;
  • 会自动提取出1~20的所有唯一元素;
  • 自动生成f_1到f_20这20个列,每个列都是对应元素所有组合列的行和。

可选优化:用正则快速筛选列

如果你的数据量特别大,还可以用正则表达式来更快地筛选包含元素i的列:

import re
for i in unique_elements:
    # 正则规则:列名以i开头(比如"i_j")或结尾(比如"j_i")
    pattern = re.compile(rf'^{i}_|_{i}$')
    target_cols = df.columns[df.columns.str.match(pattern)]
    df[f'f_{i}'] = df[target_cols].sum(axis=1)

这个方法和之前的逻辑完全一致,只是筛选列的方式更高效,适合列数极多的场景。

备注:内容来源于stack exchange,提问作者Ishigami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:58:01