如何过滤无向网络中跨类节点的连接边并去除重复记录
无向网络跨类边去重方法
核心逻辑
无向边的重复本质是两个节点的顺序颠倒,只需要给每条边生成与顺序无关的唯一标识,再按标识去重即可。
操作步骤
- 基础筛选:过滤出
Source_Class != Target_Class的跨类边,得到初步结果 - 生成标准化边标识:对每条边的两个节点做排序处理,统一生成和顺序无关的键值,这样
(1,2)和(2,1)会生成完全相同的标识 - 按生成的标准化标识去重,每个标识仅保留1条记录,最后添加值为1的
Different列即可得到目标结果
常用工具实现示例
Python(Pandas)
import pandas as pd # 读取原始数据,分隔符适配多空格场景 df = pd.read_csv("你的数据文件路径", sep="\s+") # 1. 筛选跨类边 cross_df = df[df["Source_Class"] != df["Target_Class"]].copy() # 2. 生成标准化边键,sorted后正反边生成的键完全一致 cross_df["edge_key"] = cross_df.apply(lambda x: tuple(sorted([x["Source"], x["Target"]])), axis=1) # 3. 按键去重,默认保留首次出现的记录,符合你的预期输出规则 result = cross_df.drop_duplicates("edge_key")[["Source", "Target"]] result["Different"] = 1 # 输出结果 print(result)
SQL
如果数据存储在关系型数据库中,可直接用以下语句查询得到结果:
SELECT DISTINCT LEAST(Source, Target) AS Source, GREATEST(Source, Target) AS Target, 1 AS Different FROM 你的表名 WHERE Source_Class != Target_Class
Excel
如果使用Excel处理少量数据:
- 新增辅助列,公式为
=MIN(A2,B2)&"|"&MAX(A2,B2)(假设Source在A列、Target在B列) - 新增筛选条件,保留
Source_Class != Target_Class的行 - 对筛选后的结果,按辅助列执行「删除重复值」操作即可
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

