如何在pandas中进行左外连接排除

ire*_*ene 5 python pandas

我有两个数据帧,A和B,我希望得到A中但不是B中的数据帧,就像左下角的那个.

左上角的那个

Dataframe A有列['a','b' + others],B有列['a','b' + others].没有NaN值.我尝试了以下方法:

1.

dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) | (~dfA['b'].isin(dfm['b'])
Run Code Online (Sandbox Code Playgroud)

2.

dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) & (~dfA['b'].isin(dfm['b'])
Run Code Online (Sandbox Code Playgroud)

3.

dfe = dfA[(~dfA['a'].isin(dfB['a']) | (~dfA['b'].isin(dfB['b'])
Run Code Online (Sandbox Code Playgroud)

4.

dfe = dfA[(~dfA['a'].isin(dfB['a']) & (~dfA['b'].isin(dfB['b'])
Run Code Online (Sandbox Code Playgroud)

但是当我len(dfm)len(dfe)他们不总结到dfA(它由几个数字是关闭).我试过在虚拟案例和#1工作中这样做,所以也许我的数据集可能有一些我无法重现的特性.

这样做的正确方法是什么?

phi*_*phi 8

看看这个链接

df=pd.merge(dfA, dfB, on=['a','b'], how="outer", indicator=True)
df=df[df['_merge'] =='left_only']
Run Code Online (Sandbox Code Playgroud)

  • @pedrambashiri `how="left"` 在这种情况下也有效(左外排除) (3认同)
  • 为什么how=“外部”?!为什么不“左”? (2认同)

小智 7

我认为它会类似于以下示例:Pandas left external join multiple dataframes on multiple columns

dfe = pd.merge(dFA, dFB, how='left', on=['a','b'], indicator=True)
dfe[dfe['_merge'] == 'left_only']
Run Code Online (Sandbox Code Playgroud)