Vlookup в нескольких столбцах на Python (панды) - PullRequest
1 голос
/ 19 мая 2019

Я видел много постов в SO, в которых просили сделать что-то похожее на VLOOKUP в Python, и заметил, что большинство ответов указывают на использование merge или map, но я не знаю, как применять эти функциив этом случае.
У меня есть два следующих кадра данных (REGISTER и WEEK)

REGISTER:

NAME   |PARTNER
Rafael |Roger
Sergio |Gabriel
Edson  |Ney
Alan   |Nelson
...    |...

WEEK:

MONDAY|PARTNER|TUESDAY|PARTNER|WEDNESDAY|PARTNER|...
Rafael| ??????|Sergio|??????  |Sergio   |????????
Edson | ??????|Edson |??????  |Alan     |????????
Alan  | ??????|Rafael|??????  |Edson    |????????

"????"следует заменить на что-то похожее на = VLOOKUP ('имя слева', REGISTER, 2, FALSE)

1 Ответ

3 голосов
/ 19 мая 2019

Используйте Series.map с Series по zip имен столбцов, отфильтрованных по индексации, поэтому первый столбец сопоставляется со вторым, с третьего по четвертый и аналогичен для каждого столбца:

s = REGISTER.set_index('NAME')['PARTNER']

for c1, c2 in zip( WEEK.columns[::2], WEEK.columns[1::2]):
    #print (c1, c2)
    WEEK[c2] = WEEK[c1].map(s)

print (WEEK)
   MONDAY PARTNER TUESDAY PARTNER.1 WEDNESDAY PARTNER.2
0  Rafael   Roger  Sergio   Gabriel    Sergio   Gabriel
1   Edson     Ney   Edson       Ney      Alan    Nelson
2    Alan  Nelson  Rafael     Roger     Edson       Ney

Если значение не соответствует, map создает пропущенное значение.Поэтому, если нужны исходные значения для несопоставленных значений, используйте replace вместо map.

...