如何用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)
最终结果
| A | B | C |
|---|---|---|
| aa | bb | 9 |
| aa | cc | 7 |
| aa | dd | 9 |
| bb | dd | 3 |
| dd | ee | 2 |
这个方法避免了拼接额外数据带来的冗余,一步到位完成反向边的合并与求和。
内容的提问来源于stack exchange,提问作者linkey apiacess
相关产品推荐
相关产品推荐

