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

如何利用数组提取Pandas DataFrame中的指定值

问题描述

我是Python新手,不知如何操作。我拥有一个数组和DataFrame:

import numpy as np
import pandas as pd

Column = np.array([3,1,3,2,4]) 
df = pd.DataFrame({
    1:[1,2,3,4,5],
    2:['A','B','C','D','E'],
    3:[6,7,8,9,0],
    4:['F','G','H','I','J']
})

对应的DataFrame内容为:

1  2  3  4
0 1  A  6  F
1 2  B  7  G
2 3  C  8  H
3 4  D  9  I
4 5  E  0  J

我希望根据数组Column中的值,逐行提取对应列的数据,得到结果[6,2,8,'D','J'],即:
6
2
8
D
J

解决方案

不建议用逐行遍历(效率低),直接用矢量化索引就能高效实现需求:

方法1:利用np.take和df.values

result = np.take(df.values, Column - 1, axis=1).tolist()
print(result)  # 输出:[6, 2, 8, 'D', 'J']

解释:因为DataFrame的列索引是从1开始,而数组索引从0开始,所以要Column - 1转换为0基索引,np.take按指定轴提取对应位置的元素。

方法2:用df.lookup(注意:pandas 1.2.0后已弃用,推荐方法1)

result = df.lookup(df.index, Column).tolist()
print(result)  # 输出:[6, 2, 8, 'D', 'J']

方法3:如果一定要逐行遍历(不推荐)

result = []
for idx, col_num in enumerate(Column):
    result.append(df.loc[idx, col_num])
print(result)  # 输出:[6, 2, 8, 'D', 'J']

这种方法在数据量大时速度很慢,优先用矢量化方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:24:23