Эффективное подмножество фрейма данных pandas с индексами в 2d массиве numpy

#python #arrays #pandas #numpy #dataframe

#python #массивы #pandas #numpy #фрейм данных

Вопрос:

У меня есть 2d (в будущем это может быть 3d) массив с индексами. Допустим, это выглядит так:

 [[1,1,1],
[1,2,2],
[2,2,3]]
  

И у меня есть фрейм данных pandas:

 index, A, B
1, 0.1, 0.01
2, 0.2, 0.02
3, 0,3, 0.03
  

Я хочу получить массив numpy (или pandas df) со значениями из столбца A, нарезанными на основе массива numpy. Таким образом, результат будет здесь:

 [[0.1,0.1,0.1],
[0.1,0.2,0.2],
[0.2,0.2,0.3]]
  

Я могу сделать это с помощью цикла, чтобы получить фрейм данных pandas:

 pd.DataFrame(df.A[val].values for val in array)
  

Однако я ищу более эффективный способ сделать это. Есть ли лучший способ, позволяющий мне использовать весь массив индексов одновременно?

Ответ №1:

Вы можете сделать:

 df.loc[a.ravel(),'A'].values.reshape(a.shape)
  

Вывод:

 array([[0.1, 0.1, 0.1],
       [0.1, 0.2, 0.2],
       [0.2, 0.2, 0.3]])
  

Комментарии:

1. Отлично, это именно то, что я искал. Спасибо!