Как сопоставить и объединить два кадра данных, имеющие совершенно разные значения, кроме одного слова? - PullRequest
0 голосов
/ 29 января 2019

имеют базу данных ABC со значением

        0                        1           2
0   sun is rising         |  UNKNOWN    | 1465465
1   micheal has arrived   |   UNKNOWN   | 324654
2   goal has been scored | UNKNOWN     | 547854

и другие значения XYZ

    0         1 
0 sun       | password1
1 goal      | password2
2 micheal   | password3

как сопоставить XYZ с (солнце, цель и micheal) ABC и, таким образом, 1 спароль заменит НЕИЗВЕСТНЫЙ 1 в ABC

вывод мне нужно

    0                        1           2
0  sun is rising         |  password1    | 1465465
1   micheal has arrived  |   password3   | 324654
2   goal has been scored| password2     | 547854

Ответы [ 3 ]

0 голосов
/ 29 января 2019
d = dict(zip(XYZ[0],XYZ[1]))
#{'sun': 'password1', 'goal': 'password2', 'micheal': 'password3'}
pat = (r'({})'.format('|'.join(d.keys())))
ABC[1]=ABC[0].str.extract(pat,expand=False).map(d)
print(ABC)

          0                  1         2
0  sun is rising         password1  1465465
1  micheal has arrived  password3   324654
2  goal has been scored  password2   547854
0 голосов
/ 29 января 2019

Создать словарь и сопоставить первое значение с помощью get и next:

d = dict(zip(XYZ[0], XYZ[1]))
ABC[1] = [next(d.get(y) for y in x.split() if y in d) for x in ABC[0]]
print (ABC)
                      0          1        2
0         sun is rising  password1  1465465
1   micheal has arrived  password3   547854
2  goal has been scored  password2   324654
0 голосов
/ 29 января 2019

Вот способ использования str.contains с boolean indexation для выбора пароля, в котором найдено совпадение между двумя кадрами данных:

from itertools import chain
abc.loc[:,1] = list(chain(*[xyz.loc[abc[0].str.contains(i),1] for i in xyz[0]]))

         0                  1         2
0  sun is rising         password1  1465465
1  goal has been scored  password2   324654
2  micheal has arrived   password3   547854
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...