如何删除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
相关产品推荐
相关产品推荐

