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

Pandas合并DataFrame与其副本时如何避免重复匹配结果

实现方案
  • 核心处理逻辑分为两步:

    1. 过滤掉Id_x与Id_y相等的自匹配记录
    2. 对每条记录的两个Id做排序生成唯一配对标识,基于该标识去重即可消除顺序颠倒的重复配对
  • 完整可运行代码示例:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame()
df1['Id'] = ['001','002','003','004','005','006']
df1['Tel'] = ['123','456','789','123','852','123']

df2 = df1.copy()
df3 = pd.merge(df1, df2, on='Tel', how='inner')

# 过滤自匹配记录
df_filter = df3[df3['Id_x'] != df3['Id_y']].copy()

# 生成排序后的配对键去重
df_filter['pair_key'] = df_filter.apply(lambda x: tuple(sorted([x['Id_x'], x['Id_y']])), axis=1)
df_result = df_filter.drop_duplicates(subset='pair_key').drop(columns='pair_key').reset_index(drop=True)

print(df_result)

运行上述代码得到的输出与你期望的结果完全一致:

Id_x  Tel Id_y
0  001  123  004
1  001  123  006
2  004  123  006
  • 大数据量优化方案:如果数据量较大,apply方法性能较低,可以改用向量化操作提升效率:
import numpy as np

# 替换上述pair_key生成逻辑
df_filter['min_id'] = np.minimum(df_filter['Id_x'], df_filter['Id_y'])
df_filter['max_id'] = np.maximum(df_filter['Id_x'], df_filter['Id_y'])
df_result = df_filter.drop_duplicates(subset=['min_id', 'max_id']).drop(columns=['min_id', 'max_id']).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Gustavo A. Marín Acevedo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:00