微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据Python pandas中的记录补充挑选元素

我有一个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

最后一个可以用merge在pandas中实现:

>>> 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 举报,一经查实,本站将立刻删除。

相关推荐