Pandas如何通过映射为新DataFrame中每行列表生成元素索引?
为存储列表的DataFrame列逐行生成元素位置索引
问题复现
初始DataFrame构造代码与数据结构:
import pandas as pd df = pd.DataFrame({'Item': [['hi', 'hello', 'bye'], ['school', 'pen'], ['hate', 'love', 'feelings', 'sad']]}) print(df)
初始数据输出:
Item 0 [hi, hello, bye] 1 [school, pen] 2 [hate, love, feelings, sad]
目标:新增mapped_value列,每一行的值为对应Item列表内元素的顺序位置索引,预期输出:
mapped_value 0 [0, 1, 2] 1 [0, 1] 2 [0, 1, 2, 3]
之前尝试的写法仅处理了第一行列表,无法适配全量数据:
# 错误示例:仅枚举了第一行df['Item'][0]的索引 df['mapped value'] = [i for i, x in enumerate(df['Item'][0])]
解决方法
核心逻辑是逐行读取Item列的每个列表,根据列表长度生成从0开始的连续整数序列即可,两种实现方式:
- 使用
apply逐行映射
df['mapped_value'] = df['Item'].apply(lambda x: list(range(len(x))))
- 使用列表推导式处理,大数据量下性能优于apply
df['mapped_value'] = [list(range(len(single_list))) for single_list in df['Item']]
两种写法运行后输出结果完全匹配预期,不需要额外依赖第三方工具。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

