基于Pandas列去重生成唯一ID的优化方案咨询
基于指定列生成唯一ID的Pandas高效实现
你当前的循环实现虽然可行,但数据量较大时性能会明显下降,Pandas原生的向量化操作能更简洁高效地完成这个需求,以下是两种最优方案:
方案1:用groupby().ngroup()(最简洁直观)
这个方法直接对指定列分组,为每个唯一值组合分配递增整数ID,sort=False参数保证ID顺序与原数据中组合首次出现的顺序一致,和你原代码的逻辑完全匹配:
import pandas as pd optimal = ["date", "amount", "description", "tenant_id", "comment", "bank_account_id"] # 直接生成unique_id,无需创建is_duplicated列 data_normalization["unique_id"] = data_normalization.groupby(optimal, sort=False).ngroup()
方案2:用pd.factorize()
factorize可将任意可哈希序列转换为整数ID,我们可以把指定列的每行转为元组(元组支持哈希),再传入factorize处理:
import pandas as pd optimal = ["date", "amount", "description", "tenant_id", "comment", "bank_account_id"] # 将指定列的每行转为元组,再生成ID data_normalization["unique_id"] = pd.factorize(data_normalization[optimal].agg(tuple, axis=1))[0]
优势说明
- 两者都是向量化操作,比循环遍历效率高几个数量级,大数据集下差异尤为明显;
- 代码更简洁,无需手动筛选重复行、循环赋值;
- 自动处理所有重复行,不需要额外维护
is_duplicated列。
内容的提问来源于stack exchange,提问作者Joao Henrique Ferreira
相关产品推荐
相关产品推荐

