1

我有两个数据集:

df1 = pd.DataFrame(data = {'label1': ['A', 'A', 'B', 'C'], 'label2': ['a', 'b', 'c', 'd'], 'value': [1,2,3,4]})

df2 = pd.DataFrame(data = {'label1': ['A', 'A', 'D', 'E'], 'label'2': ['a', 'd', 'c','e'], 'value2': [10,12,23,14]})

我想执行反连接,以便生成的数据框包含 df1 的行,其中在 df2 中找不到键 [['label1', 'label2']]。

结果 df 应该是:

label1     label2     value
A          b          2
B          c          3
C          d          4

在使用 dplyr 的 R 中,代码为:

df3 = anti_join(df1, df2, by = c("label1", "label2"))

谢谢你的帮助。

4

2 回答 2

6

isin_tuple

df1[~df1[['label1','label2']].apply(tuple,1).isin(df2[['label1','label2']].apply(tuple,1))]
Out[140]: 
  label1 label2  value
1      A      b      2
2      B      c      3
3      C      d      4
于 2018-07-06T18:08:01.707 回答
4

选项1

只需执行内部连接并从中删除相交的行df1

df1.drop(df1.merge(df2).index)

选项2:

您需要进行左连接,并查看有多少行显示为来自 的列的空值df2

mer = df1.merge(df2, how='left')
mer[mer['value2'].isnull()].drop(['value2'], 1)

输出:

  label1    label2  value
1   A          b    2
2   B          c    3
3   C          d    4
于 2018-07-06T18:03:11.143 回答