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

如何删除Pandas DataFrame中A列与其他行B列互等的重复行

Pandas 交叉列相等重复行去重实现方案

对应场景示例表:
表格示例

核心思路

给每一行生成A、B两列值排序后的固定标识,只要两行的A、B值是同一组(不管顺序),生成的标识就完全相同,直接基于该标识做全局去重即可。

完整实现代码

基础实现(适合中小数据量)

import pandas as pd

# 1. 构造示例测试数据(可替换为你自己的DataFrame)
df = pd.DataFrame({
    'A': [1, 2, 3, 3],
    'B': [4, 3, 2, 5],
    '其他列': ['a', 'b', 'c', 'd']
})

# 2. 生成去重标识:将A、B值排序后转为元组,保证同一组值不管顺序标识一致
df['dup_key'] = df.apply(lambda row: tuple(sorted((row['A'], row['B']))), axis=1)

# 3. 按标识去重,keep参数可选'first'(保留第一行)/'last'(保留最后一行),满足保留任意一行的需求
df = df.drop_duplicates(subset='dup_key', keep='first').drop(columns='dup_key')

高性能实现(适合百万行以上大表)

用numpy向量化操作替代逐行apply,性能提升10倍以上:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, 3, 3],
    'B': [4, 3, 2, 5],
    '其他列': ['a', 'b', 'c', 'd']
})

# 向量化生成去重标识
df['dup_key'] = list(zip(np.minimum(df['A'], df['B']), np.maximum(df['A'], df['B'])))
df = df.drop_duplicates(subset='dup_key', keep='first').drop(columns='dup_key')

效果说明

处理后原表中A=2、B=3和A=3、B=2的两行会仅保留你指定的一行,且自动覆盖非相邻重复行的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03