如何在Pandas DataFrame中去除无向图边列表的重复节点组合
处理无向图边列表的重复节点组合问题
你需要对每个文档下的无序节点组合去重,核心思路是把每行的两个节点排序,生成统一的标识,再基于这个标识和文档列进行去重操作,具体步骤如下:
步骤1:构造示例数据(已有数据可跳过)
先还原你的示例DataFrame:
import pandas as pd data = { 'node 1': ['Kn', 'TS', 'Kn', 'TS', 'Kn', 'Kn', 'TS', 'TS'], 'node 2': ['Kn', 'Kn', 'TS', 'TS', 'Kn', 'TS', 'TS', 'Kn'], 'doc': ['doc5477', 'doc5477', 'doc5477', 'doc5477', 'doc10967', 'doc10967', 'doc10967', 'doc10967'] } df = pd.DataFrame(data)
步骤2:生成统一的节点组合标识
对每行的node 1和node 2进行排序,生成一个排序后的元组作为唯一标识,这样TS-Kn和Kn-TS会被转换成相同的元组:
df['sorted_nodes'] = df.apply(lambda row: tuple(sorted([row['node 1'], row['node 2']])), axis=1)
步骤3:去重并清理临时列
基于sorted_nodes和doc列去重,保留每组重复记录的第一行,最后删除临时的sorted_nodes列:
df_unique = df.drop_duplicates(subset=['sorted_nodes', 'doc'], keep='first').drop(columns=['sorted_nodes']) # 可选:重置索引,让结果更规整 df_unique = df_unique.reset_index(drop=True)
执行后df_unique就是你想要的结果,输出如下:
node 1 node 2 doc 0 Kn Kn doc5477 1 TS Kn doc5477 2 TS TS doc5477 3 Kn Kn doc10967 4 Kn TS doc10967 5 TS TS doc10967
补充说明
- 如果想保留每组重复的最后一行,把
keep='first'改成keep='last'即可。 - 也可以不用临时列,直接通过
key参数传入排序逻辑,但临时列的方式更直观易读。
内容的提问来源于stack exchange,提问作者noahjb
相关产品推荐
相关产品推荐

