在 Python (pandas) 的多列中进行 Vlookup
Vlookup in multiple columns at Python (pandas)
我在 SO 上看到很多帖子要求在 Python 上做一些类似于 VLOOKUP 的事情,并注意到大多数答案都表明使用 merge
或 map
,但我不知道如何在这种情况下应用这些功能。
我有以下两个数据框(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
.
我在 SO 上看到很多帖子要求在 Python 上做一些类似于 VLOOKUP 的事情,并注意到大多数答案都表明使用 merge
或 map
,但我不知道如何在这种情况下应用这些功能。
我有以下两个数据框(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
.