Pandas如何删除DataFrame中两列值无序重复的行并保留首项
问题原因
你原来使用frozenset的方案逻辑上符合无序去重的要求,但存在两个问题:
- 行级
apply操作在数据量较大时性能极低 - 部分pandas版本对
frozenset类型的列执行duplicated()时存在兼容性问题,导致去重失效
解决方案
推荐使用向量化排序的方案实现需求,性能更稳定,也能完美适配所有pandas版本:
import numpy as np # 对每行的两个标签值做升序排序,保证无序相同的组合会生成完全一致的有序数组 sorted_labels = np.sort(df[["label", "label2"]], axis=1) # 基于排序后的结果判断重复,保留首次出现的行 res = df[~pd.DataFrame(sorted_labels).duplicated()]
执行后输出的结果和你预期的一致:
label label2 0 A C 1 B D 2 G O
内容的提问来源于stack exchange,提问作者hippocampus
相关产品推荐
相关产品推荐

