You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以向量化方式提取DataFrame列表列中对应索引的值?

从Pandas列表列中按对应索引提取元素(百万级数据优化)

现有DataFrame

创建代码:

import pandas as pd

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

DataFrame内容:

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

需求

新增一列extracted_value,存储lists列中每个列表在indexes列对应索引位置的元素,期望结果:

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

无效尝试

尝试以下代码时,得到的是整个列表而非对应索引的元素:

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]

同样,以下代码也会得到整个列表:

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

高效解决方案

针对百万级行的DataFrame,推荐以下两种高效方法:

方法1:Numpy向量化操作(最快)

利用Numpy的矩阵索引能力,完全避免Python循环,效率最高:

import numpy as np

# 将lists列转换为二维Numpy数组
lists_arr = np.array(df['lists'].tolist())
# 按行索引和对应indexes值提取元素
df['extracted_value'] = lists_arr[np.arange(len(lists_arr)), df['indexes']]

方法2:列表推导式(简洁且高效)

纯Python列表推导,比apply快数倍,适合数据量较大的场景:

df['extracted_value'] = [lst[idx] for lst, idx in zip(df['lists'], df['indexes'])]

方法3:apply(可读性好,适合小数据量)

如果对可读性要求更高,数据量不是极端大,也可以用apply:

df['extracted_value'] = df.apply(lambda row: row['lists'][row['indexes']], axis=1)

注意:apply的效率低于前两种方法,百万级数据不推荐。


内容的提问来源于stack exchange,提问作者Osa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:35:32