如何在pandas DataFrame中对列表元素实现唯一值映射编号?
pandas实现DataFrame列表元素的全局唯一值连续整数映射
实现代码
直接按下面的逻辑写即可,最终输出和你给出的示例完全一致:
import pandas as pd # 初始化示例数据 df = pd.DataFrame({ 'raw_col': [ ['phone', 'laptop'], ['life', 'death', 'mortal'], ['happy'] ] }) # 第一步:展平所有列表,收集全局唯一元素,生成从1开始的连续编号映射 all_elements = [] for item_list in df['raw_col']: all_elements.extend(item_list) # pd.unique会保留元素第一次出现的顺序,保证编号和示例匹配 id_mapping = {val: idx for idx, val in enumerate(pd.unique(all_elements), start=1)} # 第二步:逐行替换列表内的元素为对应编号 df['mapped_col'] = df['raw_col'].apply(lambda x: [id_mapping[item] for item in x])
运行后查看df['mapped_col']结果:
0 [1, 2] 1 [3, 4, 5] 2 [6] Name: mapped_col, dtype: object
之前写法报错的核心原因
- 直接对存储列表的列调用
map():map的处理粒度是单元格整体(也就是每个列表本身),不会自动遍历列表内部的单个元素,要么触发键值/类型错误,要么返回结果完全不符合预期。 - 逐行对列表使用
enumerate:enumerate只会给当前列表单独生成序号,每遍历一行序号就会重新从起始值开始计数,既做不到全局连续编号,遇到跨列表重复的元素还会分配多个不同ID,不符合唯一映射的要求。
内容的提问来源于stack exchange,提问作者user19389282
相关产品推荐
相关产品推荐

