不关注列值顺序时如何去除两列互换形成的重复数据行
无序两列组合去重实现方案
核心思路:无需编写跨行校验的复杂for循环,对每一行的B1、B2值生成无序组合唯一标识,再结合Alpha列做去重即可。
场景1:SQL实现
如果数据存储在关系型数据库中,直接用查询语句即可完成:
WITH temp AS ( SELECT Alpha, B1, B2, -- 生成排序后的组合键,分隔符选不会出现在B列值中的字符即可 CASE WHEN B1 < B2 THEN CONCAT(B1, '|', B2) ELSE CONCAT(B2, '|', B1) END AS pair_key FROM 你的表名 ) -- PostgreSQL可直接用DISTINCT ON,MySQL可替换为GROUP BY取每组首行逻辑 SELECT DISTINCT ON (Alpha, pair_key) Alpha, B1, B2 FROM temp -- 要匹配示例输出结果可加排序规则调整保留行 ORDER BY Alpha, pair_key, B1 DESC;
场景2:Python Pandas实现
如果是处理数据框,代码更简洁:
import pandas as pd # 假设数据已读入df变量 # 生成无序组合键 df['pair_key'] = df.apply(lambda x: tuple(sorted([x['B1'], x['B2']])), axis=1) # 按Alpha+组合键去重,keep参数可调整保留首行/末行 df_dedup = df.drop_duplicates(subset=['Alpha', 'pair_key'], keep='last').drop('pair_key', axis=1)
调整keep='last'即可完全匹配你给出的示例输出结果。
场景3:Excel实现
用辅助列即可快速处理:
- 新增辅助列D,单元格D2公式写
=IF(B2<C2,B2&"|"&C2,C2&"|"&B2),下拉填充所有行 - 选中所有列,点击「数据」选项卡的「删除重复值」,勾选Alpha列和辅助列D确认即可
- 最后删除辅助列D得到最终结果
内容的提问来源于stack exchange,提问作者AStackz
相关产品推荐
相关产品推荐

