Как выполнить VLOOKUP в пандах, используя слияние, при котором возвращается NaN, если значения из левого информационного кадра не найдены в правом информационном кадре? - PullRequest
0 голосов
/ 13 января 2019

Итак, первый (и левый) фрейм данных:

Name
Brees
Brady
Rodgers
Mahomes

Второй (и правый) кадр данных:

Name
Brees
Brady
Wilson
Mahomes

Я хочу вернуть

Name
Brees
Brady
NaN
Mahomes

Я использовал код pd.merge(df,df1,on="Name",how='left'), но он возвращает:

Name
Brees
Brady
Rodgers
Mahomes

По сути, левый кадр данных возвращается

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Вы можете использовать pd.Series.where с логическим рядом, рассчитанным по isin:

df1['Name'] = df1.where(df1['Name'].isin(df2['Name']))

print(df1)
#       Name
# 0    Brees
# 1    Brady
# 2      NaN
# 3  Mahomes
0 голосов
/ 13 января 2019

Ваш merge может работать после добавления indicator

df1.mask(df1.merge(df2,how='left',indicator =True)['_merge']=='left_only')
Out[8]: 
      Name
0    Brees
1    Brady
2      NaN
3  Mahomes
0 голосов
/ 13 января 2019

Сделайте копию левого информационного кадра и «вычеркните» строки, значения которых не находятся в правом информационном кадре:

df1 = df.copy()
df1.loc[~df.isin(df2)["Name"], "Name"] = np.nan
#      Name
#0    Brees
#1    Brady
#2      NaN
#3  Mahomes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...