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

如何用Pandas查找并合并节点间的反向重复边及连接强度

合并无向图反向边并求和连接强度

问题背景

有一个包含3列的数据集,列A、B代表节点间的边连接,列C是连接强度。需要识别并合并方向相反的重复边(比如aa-bb和bb-aa),将对应的连接强度求和。

示例数据集

import pandas as pd

data_frame = pd.DataFrame({
    "A": ["aa", "aa", "aa", "bb", "bb", "cc", "dd", "dd"],
    "B": ["bb", "cc", "dd", "aa", "dd", "aa", "ee", "aa"],
    "C": [4, 3, 4, 5, 3, 4, 2, 5]
})

对应的节点关系:

aa - bb
 |  \  |
 cc   dd -- ee

其中aa-bb与bb-aa、aa-dd与dd-aa属于反向重复边,需要合并后求和得到目标结果。

解决方案

核心思路是统一每条边的节点表示顺序,让正向和反向边变为完全相同的节点对,再通过分组直接求和,无需后续清理多余数据。

实现代码

# 对每行的A、B列按字典序排序,生成统一的节点对
data_frame[['node1', 'node2']] = pd.DataFrame(
    data_frame[['A', 'B']].apply(sorted, axis=1).tolist(),
    index=data_frame.index
)

# 按统一后的节点对分组,求和连接强度
merged_data = data_frame.groupby(['node1', 'node2'], as_index=False)['C'].sum()

# 重命名列回原格式(按需调整)
merged_data = merged_data.rename(columns={'node1': 'A', 'node2': 'B'})

# 输出结果
print(merged_data)

最终结果

ABC
aabb9
aacc7
aadd9
bbdd3
ddee2

这个方法避免了拼接额外数据带来的冗余,一步到位完成反向边的合并与求和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:20:10