如何在忽略列“value”的情况下获取df1中存在但不在df2中的行以及df2中不存在的行

2024-06-16 10:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧

df1=
   col1 col2 col3 value
   A     B    AB   5
   B     C    AB   4
   C     D    AB   3
   D     E    AB   12

df2=
   col1 col2 col3 value
   A     B    AB   3
   C     D    AB   1
   Z     E    BC   2

我需要一个新的df3,它的行在df1中存在,但在df2中不存在。类似地,我还需要一个df4,它的行在df2中,但不在df1中

df3= //Rows which in Df1 but not in df2

   col1 col2 col3 value
    B     C    AB   5
    D     E    AB   12

df4= //Rows which are in df2 but not in df1

   col1 col2 col3 value
    Z     E    BC   2

请注意,我们可以忽略列“value”,但是col1 col2 col3应该匹配才能被视为匹配

如果我使用indicator=true进行合并

mdf1=pd.merge(df1, df2, how='outer', indicator=True)
mdf1=
    col1 col2 col3  value      _merge
0    A    B   AB      5   left_only
1    B    C   AB      4   left_only
2    C    D   AB      3   left_only
3    D    E   AB     12   left_only

4    A    B   AB      3  right_only
5    C    D   AB      1  right_only
6    Z    E   BC      2  right_only

您可以看到,在mdf1行中,编号0和4、2和5相同,但由于值不同而不匹配。我想在合并时忽略值列,但我想在结果数据帧中忽略该列

这就是我所需要的mdf

   col1 col2 col3  value      _merge

0    B    C   AB      4   left_only

1    D    E   AB     12   left_only

2    Z    E   BC      2  right_only

Tags: 数据inrightonlyabvaluemergeleft
1条回答
网友
1楼 · 发布于 2024-06-16 10:36:33

在您的解决方案中,有必要删除value列:

mdf1=pd.merge(df1.drop('value', 1), df2, how='outer', indicator=True)
mdf1 = mdf1[mdf1['_merge'] == 'right_only']
print (mdf1)
  col1 col2 col3  value      _merge
4    Z    E   BC    2.0  right_only

mdf2=pd.merge(df1, df2.drop('value', 1), how='outer', indicator=True)
mdf2 = mdf2[mdf2['_merge'] == 'left_only']
print (mdf2)
  col1 col2 col3  value     _merge
1    B    C   AB    4.0  left_only
3    D    E   AB   12.0  left_only

相关问题 更多 >