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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:50:56