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

问题描述 投票:3回答:2

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

The one below the top left

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'])

2.

dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) & (~dfA['b'].isin(dfm['b'])

3.

dfe = dfA[(~dfA['a'].isin(dfB['a']) | (~dfA['b'].isin(dfB['b'])

4.

dfe = dfA[(~dfA['a'].isin(dfB['a']) & (~dfA['b'].isin(dfB['b'])

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

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

python pandas
2个回答
5
投票

看看this link

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

一个班轮:

df = pd.merge(dfA, dfB, on=['a','b'], how="outer", indicator=True
              ).query('_merge=="left_only"')

0
投票

我认为它会像下面的例子:Pandas left outer join multiple dataframes on multiple columns

dfe = pd.merge(dFA, dFB, how='left', on=['a','b'], indicator=True)
dfe[dfe[_merge] == 'left_only']
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.