Pandas大数据集下文本字段转唯一数值ID的优化实现问询
最优实现方案
直接使用pandas内置的factorize()方法即可,该方法就是为分类值转唯一整数编码设计的,时间复杂度O(n),性能远优于去重合并的实现,代码也更简洁:
# 一行完成转换,加1是为了让id从1开始匹配你的输出要求 df['key_id'] = pd.factorize(df['name'].astype(str))[0] + 1
效果验证
运行测试代码:
import pandas as pd df = pd.DataFrame({'name': ['adam', 'mick', 'john', 'adam']}) df['key_id'] = pd.factorize(df['name'].astype(str))[0] + 1 print(df)
输出完全符合你的要求:
name key_id 0 adam 1 1 mick 2 2 john 3 3 adam 1
额外说明
- 如果你的
name列本身已经是字符串类型,可以省略.astype(str),代码更精简 - 如果需要保留name和key_id的映射关系后续使用,可以单独存下来:
# 同时获取编码和去重后的name列表 encode_arr, unique_names = pd.factorize(df['name'].astype(str)) df['key_id'] = encode_arr + 1 # 生成映射字典 name_id_map = dict(zip(unique_names, df['key_id'].unique()))
内容的提问来源于stack exchange,提问作者Slaphead
相关产品推荐
相关产品推荐

