Python 连接相同列的数据帧并仅获取表B中不在A中的项
我有两个数据帧,相同列的dfA和dfB。我希望只从数据帧dfB中获取数据帧dfA中不存在的记录 要明确的是,我不想在dfA中获得不在dfB中的记录 我设法用它把一些东西拼凑起来,但代码不容易理解,而且扩展起来也不是很像Python 我正在寻找一个更优雅的解决方案,可能使用pandas-join/merge/append,但无法使其工作 我想要的示例:Python 连接相同列的数据帧并仅获取表B中不在A中的项,python,python-3.x,pandas,dataframe,join,Python,Python 3.x,Pandas,Dataframe,Join,我有两个数据帧,相同列的dfA和dfB。我希望只从数据帧dfB中获取数据帧dfA中不存在的记录 要明确的是,我不想在dfA中获得不在dfB中的记录 我设法用它把一些东西拼凑起来,但代码不容易理解,而且扩展起来也不是很像Python 我正在寻找一个更优雅的解决方案,可能使用pandas-join/merge/append,但无法使其工作 我想要的示例: dfA: Date Category Price 1 2013-11-24 Coat 22.1 2 2013-
dfA:
Date Category Price
1 2013-11-24 Coat 22.1
2 2013-11-24 Shirt 8.7
3 2013-11-01 Socks 9 <<< Only present in this df
dfB:
Date Category Price
1 2013-11-24 Coat 22.1
2 2013-11-24 Shirt 8.7
3 2013-11-24 Helmet 2.1 <<< Only present in this df
4 2013-11-24 Pants 10.7 <<< Only present in this df
Result:
Date Category Price
1 2013-11-24 Helmet 2.1
2 2013-11-24 Pants 10.7
dfA:
日期类别价格
1 2013-11-24涂层22.1
2 2013-11-24衬衫8.7
3 2013-11-01 Socks 9惯用方法之一是使用merge(…,how='outer',indicator=True)
并通过生成的列\u merge
过滤结果DF:
In [18]: (A.merge(B, how='outer', indicator=True)
.query("_merge == 'right_only'")
.drop('_merge',1))
Out[18]:
Date Category Price
3 2013-11-24 Helmet 2.1
4 2013-11-24 Pants 10.7
与外部联接一起使用,并按指示器列过滤,包括:
如果您的表中有一个唯一的列,您将根据该列进行筛选。在您的情况下,可能是通过类别
您可以使用:
dfB[~dfB['Category'].isin(dfA['Category'])]
不完全是我想要的,但是很好。正是我想要的。我学到了很多。谢谢你。@Idodo,很高兴能帮上忙:)
dfB[~dfB['Category'].isin(dfA['Category'])]