是否有可能以向量化的方式访问存储在数据框中的列表?



考虑如下数据帧:

data = {
'lists': [[0, 1, 2],[3, 4, 5],[6, 7, 8]],
'indexes': [0, 1, 2]
}
df = pd.DataFrame(data=data)
lists  indexes
0  [0, 1, 2]        0
1  [3, 4, 5]        1
2  [6, 7, 8]        2

我想创建一个新的列'extracted_value',这将是包含在'indexes'索引列表中的值(list = [0,1,2], indexes = 0 ->0,索引= 1 ->1,依此类推)

lists  indexes    extracted_values
0  [0, 1, 2]        0                   0
1  [3, 4, 5]        1                   4
2  [6, 7, 8]        2                   8

使用iterrows()执行此操作非常慢,因为我要处理包含数百万行的数据帧。

我已经试过了:

df['extracted_value'] = df['lists'][df['indexes']]

但是结果是:

lists  indexes extracted_value
0  [0, 1, 2]        0       [0, 1, 2]
1  [3, 4, 5]        1       [3, 4, 5]
2  [6, 7, 8]        2       [6, 7, 8]

下面的命令只会产生包含整个列表的extracted_value:

df['extracted_value'] = df['lists'][0]

谢谢你的帮助。

您所尝试的几乎是ok的,您只需要将其放入pd.DataFrame.apply,同时将axis参数设置为1,以确保该函数应用于每一行:

df['extracted_values'] = df.apply(lambda x: x['lists'][x['indexes']], axis=1)
df
lists  indexes  extracted_values
0  [0, 1, 2]        0                 0
1  [3, 4, 5]        1                 4
2  [6, 7, 8]        2                 8

最新更新