You need to enable JavaScript to run this app. pandas dataframe中如何提取任意顺序的两列唯一配对?
优惠活动
大模型
产品
解决方案
定价
更多

pandas dataframe中如何提取任意顺序的两列唯一配对?

问题描述

需要在pandas DataFrame中实现不区分列顺序的配对去重:只要两个元素分别出现在两列中,不管位置如何调换,都属于同一个配对,仅保留一条记录。

示例输入

col1  col2
a     b
b     a
c     d
d     c
e     d

期望输出

col1  col2
a     b
c     d
e     d
实现方法

核心逻辑是给每一行生成一个不受两列顺序影响的唯一标识,用这个标识作为去重判断依据即可。

基础实现方案

操作步骤:

  • 逐行取出col1、col2的两个元素,按照固定规则(比如字符串字典序)排序后组合成元组,作为临时去重键
  • 生成的临时去重键会把(a,b)和(b,a)识别为同一个值,天然适配“不区分顺序”的匹配要求
  • 基于临时去重键删除重复行,保留每个唯一配对的第一条原始记录,最后移除临时键列

对应可运行代码:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'col1': ['a', 'b', 'c', 'd', 'e'],
    'col2': ['b', 'a', 'd', 'c', 'd']
})

# 生成不受顺序影响的去重键
df['dedup_key'] = df.apply(
    lambda x: tuple(sorted([x['col1'], x['col2']])),
    axis=1
)

# 去重并移除临时列
result = df.drop_duplicates(subset='dedup_key', keep='first').drop(columns='dedup_key')

大数据量优化方案

当DataFrame行数较多时,逐行apply的运行效率偏低,可以用向量化操作生成排序键,减少循环耗时:

import numpy as np

# 逐行对两列元素做排序,生成无顺序的配对组合
sorted_pairs = np.sort(df[['col1', 'col2']].values, axis=1)
# 取排序后组合的首次出现索引,筛选得到最终结果
result = df.iloc[pd.DataFrame(sorted_pairs).drop_duplicates(keep='first').index]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 08:06:04