【发布时间】:2020-07-31 12:25:39
【问题描述】:
我有两个示例 dfs,如下所示:
df1
Name DOB
0 AMY 20100101
1 AMANDA 19990213
2 LEO 19920103
3 RIO 20200109
4 JEFF 20050314
df2
Name DOB
0 AMY 20100101
1 LEO 19920103
2 SEAN 19971123
3 BEN 20170119
4 SAM 20020615
5 YI 19930202
6 RICHAEE 19980919
7 MICHAEL 19920229
我想比较两个dfs,预期的结果如下:
Name DOB
AMANDA 19990213
RIO 20200109
JEFF 20050314
我尝试使用左连接,但没有达到我的预期
df1=pd.DataFrame({'Name':['AMY','AMANDA','LEO','RIO','JEFF'],
'DOB':['20100101','19990213','19920103','20200109','20050314']})
df2=pd.DataFrame({'Name':['AMY','LEO','SEAN','BEN','SAM','YI','RICHAEEL','MICHAEL'],
'DOB':['20100101','19920103','19971123','20170119','20020615','19930202','19980919','19920229']})
pd.merge(df1, df2, on='Name', how='left')
谁能帮助我?谢谢!
【问题讨论】:
-
嗨,这很有趣,我想知道这是否会引起人们的兴趣stackoverflow.com/questions/28901683/…
-
这也被称为“反加入”stackoverflow.com/questions/38516664/anti-join-pandas
pd.merge(df1, df2[['Name']], on='Name', how='left', indicator=True).loc[lambda df: df['_merge'] == 'left_only'].drop(columns='_merge') -
使用
df1[~df1['Name'].isin(df2['Name'])] -
@mcskinner 谢谢。很高兴学习了反加入!您能否将解决方案发布到答案中,我可以接受吗?谢谢!
-
或
pd.merge(df1, df2[['Name']], on='Name', how='left', indicator=True).loc[lambda x: x['_query']=='left_only'].drop(columns='_merge')
标签: python-3.x pandas