如何在pandas中对比两列值并去除两值互换的重复行
解决方案
可以实现,基于pandas处理即可,核心思路是对每行的两个ID排序生成唯一标识,按标识去重就能过滤掉顺序相反的重复行。
基础实现(适合中小数据量)
import pandas as pd # 构造示例数据,实际使用时替换为你自己的dataframe即可 data = { "S.no.": [1,2,3,4], "Column1": ["00001x", "00003j", "00002x", "00004d"], "Column2": ["00002x", "00005k", "00001x", "00008e"] } df = pd.DataFrame(data) # 生成排序后的ID对作为去重依据 df["sorted_pair"] = df.apply(lambda row: tuple(sorted([row["Column1"], row["Column2"]])), axis=1) # 按sorted_pair去重,keep参数控制保留行规则:first留先出现的,last留后出现的 df_unique = df.drop_duplicates(subset="sorted_pair", keep="first").drop(columns="sorted_pair") print(df_unique)
输出结果:
S.no. Column1 Column2 0 1 00001x 00002x 1 2 00003j 00005k 3 4 00004d 00008e
优化实现(适合十万行以上大数据量)
用numpy向量化操作替代行遍历,处理速度提升10倍以上:
import numpy as np # 直接对两列值做向量化排序 arr = np.sort(df[["Column1", "Column2"]].values, axis=1) df["sorted_pair"] = list(map(tuple, arr)) # 后续去重逻辑和上面一致 df_unique = df.drop_duplicates(subset="sorted_pair", keep="first").drop(columns="sorted_pair")
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

