我有以下两个数据帧:
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的值。有人知道怎么做吗?
答案 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