gpt4 book ai didi

python - Pandas 左外连接排除

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:30 28 4
gpt4 key购买 nike

如何在 Pandas 中进行左外连接(不包括交集)?

我有 2 个 Pandas 数据框

df1 = pd.DataFrame(data = {'col1' : ['finance', 'finance', 'finance', 'accounting', 'IT'], 'col2' : ['az', 'bh', '', '', '']}) 
df2 = pd.DataFrame(data = {'col1' : ['finance', 'finance', 'finance', 'finance', 'finance'], 'col2' : ['', 'az', '', '', '']})

df1

    col1    col2
0 finance az
1 finance bh
2 finance
3 accounting
4 IT

df2

    col1    col2
0 finance
1 finance az
2 finance
3 finance
4 finance

如您所见,数据框也有空白值。我尝试使用 example而且它没有给我想要的结果。

common = df1.merge(df2,on=['col1','col2'])
df3=df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))]

我希望输出看起来像

    col1    col2
3 accounting
4 IT

最佳答案

Pandas left outer join exclusion可以通过设置pandas merge的indicator=True来实现。然后按 _merge 列中的指标进行过滤。

df=pd.merge(df1,df2[['col1']],on=['col1'],how="outer",indicator=True)
df=df[df['_merge']=='left_only']
# this following line is just formating
df = df.reset_index()[['col1', 'col2']]

输出:

col1    col2
0 accounting
1 IT

==================================

====下面是一个展示机制的例子====

df1 = pd.DataFrame({'key1': ['0', '1'],
'key2': [-1, -1],
'A': ['A0', 'A1'],
})


df2 = pd.DataFrame({'key1': ['0', '1'],
'key2': [1, -1],
'B': ['B0', 'B1']
})

:

df1

输出:

    A   key1    key2
0 A0 0 -1
1 A1 1 -1

:

df2

输出:

    B   key1    key2
0 B0 0 1
1 B1 1 -1

:

df=pd.merge(df1,df2,on=['key1','key2'],how="outer",indicator=True)

:

输出:

     A  key1    key2    B   _merge
0 A0 0 -1 NaN left_only
1 A1 1 -1 B1 both
2 NaN 0 1 B0 right_only

:在_merge栏中加上上述指标。您可以在一个数据框中选择行,但不能在另一个数据框中选择行。

df=df[df['_merge']=='left_only']
df

输出:

    A   key1    key2    B   _merge
0 A0 0 -1 NaN left_only

关于python - Pandas 左外连接排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44660043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com