antijoin (▷) SQL. pandas , .
, :)
>>> t1 = df1[["start", "end"]]
>>> t2 = df2[["start", "end"]]
>>> f = t2.apply(lambda x2: t1.apply(lambda x1: x1.isin(x2).all(), axis=1).any(), axis=1)
>>> df2[~f]
end pkid start
2 2010 NaN 2010
:
SQL , not exists:
select *
from df2
where not exists (select * from df1 where df1.start = df2.start and df1.end = df2.end)
left outer join where:
select *
from df1
left outer join df1 on df1.start = df2.start and df1.end = df1.end
where df1.<key> is null
pandas merge:
>>> m = pd.merge(df2, df1, how='left', on=['end','start'], suffixes=['','_r'])
>>> df2[m['pkid_r'].isnull()]
end pkid start
2 2010 NaN 2010