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

已移除自比较行,如何移除Pandas DataFrame中顺序重复的图像比较行?

解决方法

要移除这种顺序重复的比较行,核心思路是给每一对正向/反向的比较生成唯一的无序标识,再基于这个标识去重,以下是两种实用实现方式:

方法1:生成排序后的配对键(高效适配大数据集)

通过将每行的两组标识排序后生成统一键,让正向和反向比较的键完全一致,再按键去重:

# 把(f1,s1)和(f2,s2)分别组合成元组
df['pair_left'] = list(zip(df['f1'], df['s1']))
df['pair_right'] = list(zip(df['f2'], df['s2']))

# 对两个元组排序,生成唯一的无序配对键
df['unique_pair'] = df.apply(lambda row: tuple(sorted((row['pair_left'], row['pair_right']))), axis=1)

# 保留每个唯一键对应的第一行,删除中间辅助列
df_dedup = df.drop_duplicates(subset='unique_pair', keep='first').drop(columns=['pair_left', 'pair_right', 'unique_pair'])

方法2:直接比较标识大小(简洁适配小数据集)

利用元组的自然排序特性,只保留(f1,s1)小于(f2,s2)的行,直接过滤掉反向重复项:

# 通过元组比较筛选,只保留单向配对行
df_dedup = df[df.apply(lambda row: (row['f1'], row['s1']) < (row['f2'], row['s2']), axis=1)]

补充说明

  • 如果需要保留反向配对而非正向,只需把方法2中的<改为>,或者方法1中的keep='first'改为keep='last'。
  • 方法1通过预先生成唯一键,在大数据集上的运行效率优于方法2的逐行apply。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:52:06