通过多个索引获取熊猫数据

时间:2019-06-11 05:46:29

标签: python pandas

假设我有以下数据:

np.random.seed(42)
data = pd.DataFrame(np.random.randn(3,3))

我希望获取按行和列索引的值:

rows = [0, 1, 2]
cols = [2, 1, 1]

但是,做data.loc[rows, cols]给了我数据框:

        2           1          1
0   0.647689    -0.138264   -0.138264
1   -0.234137   -0.234153   -0.234153
2   -0.469474   0.767435    0.767435

我真正追求的行为如下:

[data.loc[r, c] for r,c in zip(rows, cols)]
>>> [0.6476885381006925, -0.23415337472333597, 0.7674347291529088]

在大熊猫中这样做的正确/有效方法是什么?

2 个答案:

答案 0 :(得分:2)

将DataFrame转换为2d numpy数组并使用花式索引:

#pandas 0.24+
arr = data.to_numpy()[rows, cols]
#pandas below
arr = data.values[rows, cols]
print (arr)
[ 0.64768854 -0.23415337  0.76743473]

答案 1 :(得分:1)

您正在寻找熊猫内置函数iat

运行与您使用的完全相同的代码,并将data.loc替换为data.iat,将生成所需的输出。

np.random.seed(42)
data = pd.DataFrame(np.random.randn(3,3))

rows = [0, 1, 2]
cols = [2, 1, 1]

[data.iat[r, c] for r,c in zip(rows,cols)]

>>> [0.6476885381006925, -0.23415337472333597, 0.7674347291529088]