python – 连接相同列的pandas数据帧,并且只获取表B中不存在于A中的项

我有两个相同列的dfA和dfB数据帧.我希望只获取dataframe dfB中不存在于dataframe dfA中的记录.

要清楚,我不想在dfA中获取不在dfB中的记录.

我设法使用this一起破解了一些东西,但代码不容易理解,而且扩展不是非常pythonic.

我正在寻找一个更优雅的解决方案,也许使用pandas join / merge / append但是无法使其工作.

我想要的例子:

  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

最佳答案 其中一种惯用方法是使用merge(…,how =’outer’,indicator = True)并按生成的列_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
点赞