Как мне найти значение индекса в ndarray и преобразовать в pandas Dataframe? - PullRequest
2 голосов
/ 27 октября 2019

У меня есть ndarray, созданное cKDTree, например:

idx = array([[2941, 4837, 3593],
             [ 323, 3209, 3649]])

, и я хотел бы использовать его для создания панд DataFrame, использующих их в качестве индексов для другого фрейма данных, которыйимеет некоторые другие символы, например:

2941, A
4837, B
3593, C
323,  D
3209, E
3649, F

И, используя что-то вроде gdf = pd.DataFrame(idx), я бы хотел иметь DataFrame

    idx_0   idx_1   idx_2
0       A       B       C
1       D       E       F

вместо

    idx_0   idx_1   idx_2
0    2941    4837    3593
1     323    3209    3649

Как мне это сделать с многомерным массивом? df.loc[idx] не будет работать.

Ответы [ 2 ]

2 голосов
/ 27 октября 2019

Используйте Series.map с apply для всех столбцов DataFrame:

s = df.set_index('a')['b']
print (s)
a
2941    A
4837    B
3593    C
323     D
3209    E
3649    F
Name: b, dtype: object

idx = np.array([[2941, 4837, 3593],
             [ 323, 3209, 3649]])

gdf = pd.DataFrame(idx).apply(lambda x: x.map(s))
print (gdf)
   0  1  2
0  A  B  C
1  D  E  F
1 голос
/ 27 октября 2019

Вы можете использовать applymap :

lookup = dict(zip(df[0], df[1]))
result = pd.DataFrame(idx).applymap(lookup.get)
print(result)

Выход

     0   1   2
0    A   B   C
1    D   E   F

Предполагая, что df равно:

      0    1
0  2941    A
1  4837    B
2  3593    C
3   323    D
4  3209    E
5  3649    F

В качестве альтернативы, учитывая, что idx - это пустой массив, вы можете отобразить, используя numpy.vectorize , а затем построить DataFrame:

result = pd.DataFrame(np.vectorize(lookup.get)(idx))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...