python: отображение комбинации значений столбцов для извлечения элементов списка - PullRequest
0 голосов
/ 16 октября 2019

У меня есть датафрейм, как показано ниже:

df = pd.DataFrame({"col1":[1,2,3,4], "col2":[5,6,7,8]})
df
   col1  col2
0     1     5
1     2     6
2     3     7
3     4     8

У меня есть список:

ls = ["a", "b", "c", "d", "e", "f", "g", "h", "ij"]

Мне нужно сопоставить комбинацию col1 и col2 с индексом списка таким образом, чтобы 1 и5 сопоставляется с б и ф. Последний фрейм данных, который мне нужен:

df
   col1  col2 item1 item2
0     1     5     b     f
1     2     6     c     g
2     3     7     d     h
3     4     8     e    ij

Я попытался сгенерировать все возможные пары из списка, используя itertools.combinations, а затем сопоставил его с фреймом данных pandas. Но это работает только для небольшого списка. Мой фактический список содержит> 5000 элементов, и поэтому я получаю ошибку памяти, если я использую itertools. Пожалуйста, дайте мне знать, если есть лучшее решение для этого.

Ответы [ 3 ]

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

Использование applymap:

import pandas as pd

df = pd.DataFrame({"col1":[1,2,3,4], "col2":[5,6,7,8]})

ls = ["a", "b", "c", "d", "e", "f", "g", "h", "ij"]

df[["item1","item2"]] = df.applymap(lambda x: ls[x])

print (df)

#
   col1  col2 item1 item2
0     1     5     b     f
1     2     6     c     g
2     3     7     d     h
3     4     8     e    ij
1 голос
/ 16 октября 2019

Использование enumerate с map

Пример:

ls = dict(enumerate(["a", "b", "c", "d", "e", "f", "g", "h", "ij"]))
# --> {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'ij'}

df = pd.DataFrame({"col1":[1,2,3,4], "col2":[5,6,7,8]})
df["item1"] = df['col1'].map(ls) 
df["item2"] = df['col2'].map(ls)
print(df) 

Выход:

   col1  col2 item1 item2
0     1     5     b     f
1     2     6     c     g
2     3     7     d     h
3     4     8     e    ij
0 голосов
/ 16 октября 2019

Преобразовать список ls в массив numpy и просто добавить модный индекс в столбцы

arr = np.array(ls)
df['item1'], df['item2'] = arr[df.values].T

print(df)

Out[85]:
   col1  col2 item1 item2
0     1     5     b     f
1     2     6     c     g
2     3     7     d     h
3     4     8     e    ij
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...