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

如何检测Pandas DataFrame中的反向列并将对应值求和合并

解决方案

核心思路是给每一行的两列组合生成一个不区分顺序的唯一标识,将正向、反向的同组合行分到同一组后聚合求和即可,具体实现如下:

首先构造测试数据:

import pandas as pd

df = pd.DataFrame({
    'Col A': ['A', 'C', 'B', 'E'],
    'Col B': ['B', 'D', 'A', 'F'],
    'Value': [2, 3, 2, 5]
})

常规实现(保留原始列出现顺序)

如果需要保留首次出现的列顺序(和你示例的输出完全一致),可以用如下方法:

# 生成不区分顺序的配对键,正反配对会得到相同的元组
df['pair'] = df.apply(lambda x: tuple(sorted([x['Col A'], x['Col B']])), axis=1)
# 按配对键分组,求和Value,同时取分组内第一个出现的Col A、Col B
result = df.groupby('pair').agg({
    'Col A': 'first',
    'Col B': 'first',
    'Value': 'sum'
}).reset_index(drop=True)[['Col A', 'Col B', 'Value']]

输出result即可得到你需要的结果:

Col A Col B  Value
0     A     B      4
1     C     D      3
2     E     F      5

高性能实现(适合大数据量)

如果不需要严格保留原始列顺序,统一按大小排序展示,可以用向量化操作替代apply,性能提升非常明显:

import numpy as np
df['min_col'] = np.minimum(df['Col A'], df['Col B'])
df['max_col'] = np.maximum(df['Col A'], df['Col B'])
result = df.groupby(['min_col', 'max_col']).agg(
    Value=('Value', 'sum')
).reset_index().rename(columns={'min_col': 'Col A', 'max_col': 'Col B'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:15:02