如何利用数组提取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
相关产品推荐
相关产品推荐

