1

我有以下两个数据框 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')让我们获得df1and的所有常用列df3

4

2 回答 2

0

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

result = df1[~df1['raw'].isin(df2['raw'])]
于 2022-02-03T13:28:18.083 回答
0

你是封闭的,merge你只需要额外的步骤。首先,您需要执行外连接以保留两个数据帧中的所有行,然后启用indicatorofmerge然后在此指标上进行过滤以保留正确的值(来自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
于 2022-02-03T13:35:28.010 回答