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

如何对DataFrame中唯一双向列组合对应的值求和?

合并DataFrame中双向配对并求和

示例数据准备

先还原你的输入数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'iso_o': ['ABW', 'AFG', 'NDL', 'NDL', 'ALB', 'ABW'],
    'iso_d': ['AFG', 'ABW', 'ALB', 'ARE', 'NDL', 'ARM'],
    'value': [5, 100, 17, 4758, 13, 10]
})

解决方案

核心思路是标准化双向配对的标识,让ABW-AFG和AFG-ABW被识别为同一组,再对value求和。

方法一:高效批量处理(适合大数据量)

利用numpy对每行的iso_o和iso_d排序,生成统一的配对标识:

# 对每行的两个iso代码排序,生成标准化配对
sorted_iso = np.sort(df[['iso_o', 'iso_d']], axis=1)
df['standard_o'] = sorted_iso[:, 0]
df['standard_d'] = sorted_iso[:, 1]

# 按标准化配对分组求和
result = df.groupby(['standard_o', 'standard_d'])['value'].sum().reset_index()

# 重命名列并调整顺序
result.columns = ['iso_o', 'iso_d', 'value']

方法二:逐行处理(逻辑直观)

用apply逐行生成排序后的配对元组,再分组求和:

# 生成排序后的配对元组作为分组键
df['pair'] = df.apply(lambda row: tuple(sorted([row['iso_o'], row['iso_d']])), axis=1)

# 分组求和并拆分配对键
result = df.groupby('pair')['value'].sum().reset_index()
result[['iso_o', 'iso_d']] = pd.DataFrame(result['pair'].tolist(), index=result.index)

# 清理临时列并调整顺序
result = result.drop('pair', axis=1)[['iso_o', 'iso_d', 'value']]

最终结果

执行上述代码后,result即为你需要的输出:

iso_o iso_d  value
0   ABW   AFG    105
1   ABW   ARM     10
2   NDL   ALB     30
3   NDL   ARE   4758

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:10:29