根据 Dataframe 中的公共列删除行索引

Delete row indices based on common columns in a Dataframe

我有以下两个数据帧 df1 和 df2

  final  raw  st
   abc   12  10
   abc   17  15
   abc   14  17

   final   raw
    abc   12
    abc   14 

我的预期输出是

  final  raw  st
   abc   17  15

我想删除基于公共列值的行。 我的尝试: df1.isin(df2) 这给了我布尔结果。另一件事,我试过了 df3 = pd.merge(df1, df2, on = ['final', 'raw'], how = 'inner') 以便我们获得 df1df3 的所有公共列。

使用isin时需要参考正确的列。

result = df1[~df1['raw'].isin(df2['raw'])]

您已关闭 merge 您只需要额外的步骤。首先,您需要执行外部联接以保留来自两个数据帧的所有行并启用 indicator of merge,然后过滤此指标以保留正确的值(来自 df2)。最后,只保留来自 df1:

的列
df3 = pd.merge(df1, df2, on = ['final', 'raw'], how='outer', indicator=True) \
        .query("_merge == 'left_only'")[df1.columns]
print(df3)

# Output
  final  raw  st
1   abc   17  15