Как применить функцию к матрице панд, которая знает местоположение каждой ячейки? - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно получить информацию на основе каждой ячейки в кадре данных pandas, которая зависит от расположения этой ячейки в матрице.Это собирает оценки из 3 ячеек, соседствующих с 1 ячейкой.

scores.append(numpy.array([df.iloc[a-1, b-1], df.iloc[a, b-1], df.iloc[a-1, b]]))

Я хочу провести это по всей матрице для каждой ячейки.Для этого мне нужно получить имя строки (b), имя столбца (a), которые представляют собой числа, представляющие местоположение этой ячейки.Как я могу получить доступ к этой информации в apply или applymap?Я пытался получить доступ к x.name и x.index, но он не возвращает единичные значения.

1 Ответ

0 голосов
/ 27 сентября 2019

Я думаю, что невозможно получить положение элемента изнутри applymap.

Однако вы можете использовать shift для получения предыдущих строк / столбцов, подобных этому:

import pandas as pd, numpy as np
df = pd.DataFrame(np.array(range(25)).reshape(5,5) , columns = list('abcde'))
print(df)
#    a   b   c   d   e
#0   0   1   2   3   4
#1   5   6   7   8   9
#2  10  11  12  13  14
#3  15  16  17  18  19
#4  20  21  22  23  24

stack = np.dstack((df.shift().shift(axis=1), df.shift(axis=1), df.shift()))
pd.DataFrame([list(x) for x in stack], columns=df.columns.values)

Результат:

                  a                   b                   c                   d                   e
0   [nan, nan, nan]     [nan, 0.0, nan]     [nan, 1.0, nan]     [nan, 2.0, nan]     [nan, 3.0, nan]
1   [nan, nan, 0.0]     [0.0, 5.0, 1.0]     [1.0, 6.0, 2.0]     [2.0, 7.0, 3.0]     [3.0, 8.0, 4.0]
2   [nan, nan, 5.0]    [5.0, 10.0, 6.0]    [6.0, 11.0, 7.0]    [7.0, 12.0, 8.0]    [8.0, 13.0, 9.0]
3  [nan, nan, 10.0]  [10.0, 15.0, 11.0]  [11.0, 16.0, 12.0]  [12.0, 17.0, 13.0]  [13.0, 18.0, 14.0]
4  [nan, nan, 15.0]  [15.0, 20.0, 16.0]  [16.0, 21.0, 17.0]  [17.0, 22.0, 18.0]  [18.0, 23.0, 19.0]
...