Python Pandas优化:为原始数据高效生成去重后对应标签
高效解决Pandas批量匹配标签的问题
别再用嵌套循环啦!这种逐行匹配的方式时间复杂度是O(n*m),数据量稍微大一点就会慢到离谱。Pandas本身提供了专门的矢量化操作,能帮你几秒钟搞定这个需求。
最优解决方案:使用merge()做左连接
因为你已经通过drop_duplicates(subset=['A','B'])得到了唯一的A+B组合标签映射,直接用左连接就能把标签批量映射回原始数据:
# 只保留去重数据里的匹配键和标签列,避免合并后出现重复列 label_mapping = dropped_data[['A', 'B', 'label']] # 左连接:原始数据的每一行都会匹配到对应的标签,重复行自动继承 origin_data = origin_data.merge(label_mapping, on=['A', 'B'], how='left')
为什么这个方法高效?
merge()是Pandas底层优化的矢量化操作,采用哈希匹配等高效算法,时间复杂度接近O(n+m),远优于循环的O(n*m)- 不需要手动遍历每一行,完全利用Pandas的向量化计算能力,代码简洁还不容易出错
- 即使原始数据有几十万甚至上百万行,也能快速完成匹配
对比你的原始方法
你之前的嵌套循环逻辑,相当于每一行原始数据都要遍历去重后的数据集直到找到匹配,假设原始数据有10万行,去重后有1万行,就要做10亿次比较,这完全是没必要的性能浪费!
举个实际例子,用你提供的测试数据跑一遍:
原始数据:
A B
1 1
1 1
2 2
2 3
5 3
6 4
5 4
5 4
去重打标后的数据:
A B label
1 1 1
2 2 0
2 3 1
5 3 1
6 4 0
5 4 1
运行merge后直接得到你想要的结果:
A B label
1 1 1
1 1 1
2 2 0
2 3 1
5 3 1
6 4 0
5 4 1
5 4 1
完美匹配你的需求,而且效率提升不是一点半点!
内容的提问来源于stack exchange,提问作者Geonsu Kim
相关产品推荐
相关产品推荐

