python - 在 Python (pandas) 的多列中进行 Vlookup

标签 python pandas dictionary merge vlookup

我在 SO 上看到很多帖子要求在 Python 上做类似于 VLOOKUP 的事情,并注意到大多数答案都表明使用 mergemap ,但我不知道如何在这种情况下应用这些功能。
我有以下两个数据框(REGISTER 和 WEEK)

注册:

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

周:

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

“????”应该替换为类似于 =VLOOKUP('name in the left', REGISTER, 2, FALSE)

最佳答案

使用Series.map使用 Series by 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

关于python - 在 Python (pandas) 的多列中进行 Vlookup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207356/

相关文章:

python - Pandas:根据另一列向后填充缺失值

python将带有行和列标题的csv文件读入带有两个键的字典中

python - 使用python实现异构csv的数据结构

c# - 在 C# 中将字典转换为列表集合

python - Python练习中的高阶函数

python - 从子类实例访问父类实例属性?

python - 以相反顺序应用 Python Pandas 指数加权平均值

python - 替换 Django 图像不会删除原始图像

python - 选择等于python中子字符串的列

python - 使用前一行的值来更新新行的值