因此,第一个(左侧)数据帧是:
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
基本上,返回左数据帧
答案 0 :(得分:2)
您可以将pd.Series.where
与通过isin
计算的布尔序列一起使用:
df1['Name'] = df1.where(df1['Name'].isin(df2['Name']))
print(df1)
# Name
# 0 Brees
# 1 Brady
# 2 NaN
# 3 Mahomes
答案 1 :(得分:2)
添加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
答案 2 :(得分:1)
制作左侧数据框的副本,并“划掉”其值不在右侧daraframe中的行:
df1 = df.copy()
df1.loc[~df.isin(df2)["Name"], "Name"] = np.nan
# Name
#0 Brees
#1 Brady
#2 NaN
#3 Mahomes