Python:根据两个条件比较数据帧

时间:2017-09-01 11:55:02

标签: python pandas

我有以下两个数据帧:

DF1:

date   id 
2000   1
2001   1
2002   2

DF2:

date   id 
2000   1
2002   2

我现在想要根据日期和ID提取df1中但不在df2中的观察列表。

结果应如下所示:

date id
2001  1

我知道如何创建一个命令来将列与列表进行比较,如下所示:

result = df1[~df1["id"].isin(df2["id"].tolist())]

但是,这只会比较基于列ID的两个数据帧。因为它可能是id在df1和df2中,但对于不同的日期,重要的是我只获得两个数据帧中都存在id和id的值。有人知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

使用merge

In [795]: (df1.merge(df2, how='left', indicator='_a')
              .query('_a == "left_only"')
              .drop('_a', 1))
Out[795]:
   date  id
1  2001   1

详细

In [796]: df1.merge(df2, how='left', indicator='_a')
Out[796]:
   date  id         _a
0  2000   1       both
1  2001   1  left_only
2  2002   2       both

In [797]: df1.merge(df2, how='left', indicator='_a').query('_a == "left_only"')
Out[797]:
   date  id         _a
1  2001   1  left_only