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

如何移除DataFrame中两列的双向重复关联行?

解决DataFrame中双向关联重复行的问题

你的原代码失效原因是把index列也纳入了排序范围,index是唯一值,导致排序后的每行因为index不同,无法被duplicated()识别为重复项。

以下是几种可行的解决方案:

方法1:基于实体名称生成唯一关联键

通过对每行的name_1和name_2排序,生成一个唯一的关联标识,再根据这个标识去重:

import pandas as pd

# 生成排序后的实体对作为唯一键
df['pair_key'] = df.apply(lambda row: tuple(sorted([row['name_1'], row['name_2']])), axis=1)
# 保留每个关联对的第一行记录
df_unique = df.drop_duplicates(subset='pair_key', keep='first')
# 清理临时生成的键列
df_unique = df_unique.drop('pair_key', axis=1)

方法2:基于文件路径直接判断(更贴合文件处理需求)

因为你最终要处理文件路径,直接用path1和path2生成排序后的键更准确:

df['path_pair'] = df.apply(lambda row: tuple(sorted([row['path1'], row['path2']])), axis=1)
df_unique = df.drop_duplicates(subset='path_pair', keep='first').drop('path_pair', axis=1)

方法3:优化你原有的numpy排序方式

只针对关联列(而非整个DataFrame)排序,避免index干扰:

import numpy as np

# 仅对name_1和name_2列进行排序
sorted_name_pairs = np.sort(df[['name_1', 'name_2']].values, axis=1)
# 转换为DataFrame后判断重复,过滤原表
df_unique = df[~pd.DataFrame(sorted_name_pairs).duplicated()]

处理后,原表中的双向关联行(比如0和1、2和3、4和6等)只会保留第一行,后续你就可以安全地用df_unique['path2']中的路径删除对应文件,不会重复处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:32:03