从索引位置数组中获取 pandas 系列的值

Get values of pandas series from a array of index locations

我有一个 pandas 系列索引的二维数组。想创建一个二维数组,其中包含与索引相对应的 pandas 系列中的值。

例如:

import pandas as pd
import numpy as np
A = pd.Series(data=[1,2,3,4,5])
idx = np.array([[0,2,3],[2,3,1]])

想return:

B = np.array([[1,3,4],[3,4,2]])

我知道我可以循环执行此操作:

B = np.zeros((2,3))
for i in [0,1]:
    B[i,:] = test[idx[i]]

然而,在实践中需要重复执行此操作,因此想直接广播索引位置。 Pandas 不是必需的,如果更容易的话,很乐意在 numpy 中全部完成。

类似这样的方法可能有效:

A[idx.flatten()].values.reshape(idx.shape)

A[idx] 给出 Cannot index with multidimensional key 错误。

In [190]: A = pd.Series(data=[1,2,3,4,5])
     ...: idx = np.array([[0,2,3],[2,3,1]])

但是从系列派生的一维数组可以这样索引:

In [191]: A.values
Out[191]: array([1, 2, 3, 4, 5])
In [192]: A.values[idx]
Out[192]: 
array([[1, 3, 4],
       [3, 4, 2]])

numpy 返回维度与 idx.

匹配的数组没有问题

像这样索引系列 returns 一个系列 - 根据定义是 1d:

In [194]: A[idx.ravel()]
Out[194]: 
0    1
2    3
3    4
2    3
3    4
1    2
dtype: int64