我有一个python pandas DataFrame问题.有两个包含记录的DataFrame,df1和df2.它们包含以下值:
df1:
pkid start end
0 0 2005 2005
1 1 2006 2006
2 2 2007 2007
3 3 2008 2008
4 4 2009 2009
df2:
pkid start end
0 3 2008 2008
1 NaN 2009 2009
2 NaN 2010 2010
我期待从df2中隔离记录w / index = 2.换句话说,我希望找到df2的所有记录,其中df1中没有匹配的记录,其中只考虑了起始和结束列值.谢谢!
解决方法:
此操作在关系代数和sql中调用了antijoin (▷)
.我试图为此找到本地熊猫的操作,但一无所获.
>>> 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中,它可以通过不同的方式完成,例如不存在:
select *
from df2
where not exists (select * from df1 where df1.start = df2.start and df1.end = df2.end)
或者使用where子句左外连接:
select *
from df1
left outer join df1 on df1.start = df2.start and df1.end = df1.end
where df1.<key> is null
>>> m = pd.merge(df2, df1, how='left', on=['end','start'], suffixes=['','_r'])
>>> df2[m['pkid_r'].isnull()]
end pkid start
2 2010 NaN 2010
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。