如何基于Pandas DataFrame列值提取列表列的指定元素?
Pandas根据另一列值从列表列选取元素
你的需求是根据value列的索引值,从list_column列的列表中提取对应位置的元素,之前的方法失效是因为str[]仅支持标量索引,无法直接传入Series实现逐行匹配。下面给出两种可行方案:
方法1:逐行apply处理(适合小数据集)
通过apply遍历每行数据,用当前行的value作为索引,从list_column的列表中取元素:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'list_column': [['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']], 'value': [0, 2, 1] }) # 添加selected列 df['selected'] = df.apply(lambda row: row['list_column'][row['value']], axis=1)
方法2:向量化numpy操作(适合大数据集,效率更高)
把列表列转成二维numpy数组,再结合行索引和value列的索引值批量提取元素:
import pandas as pd import numpy as np df = pd.DataFrame({ 'list_column': [['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']], 'value': [0, 2, 1] }) # 转成二维数组后按位置提取 arr = np.array(df['list_column'].tolist()) df['selected'] = arr[np.arange(len(df)), df['value']]
两种方法执行后,都会得到你期望的结果:
list_column value selected 0 [a, b, c] 0 a 1 [a, b, c] 2 c 2 [a, b, c] 1 b
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

