Python 连接相同列的数据帧并仅获取表B中不在A中的项

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和dfB。我希望只从数据帧dfB中获取数据帧dfA中不存在的记录

要明确的是,我不想在dfA中获得不在dfB中的记录

我设法用它把一些东西拼凑起来,但代码不容易理解,而且扩展起来也不是很像Python

我正在寻找一个更优雅的解决方案,可能使用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
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'])]