带有Pandas的Python 2.7:如何恢复两个数据帧的非相交部分?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带有Pandas的Python 2.7:如何恢复两个数据帧的非相交部分?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1800字,纯文字阅读大概需要3分钟。
内容图文
![带有Pandas的Python 2.7:如何恢复两个数据帧的非相交部分?](/upload/InfoBanner/zyjiaocheng/679/8346bee56fa84f06abeef05a649ae106.jpg)
我有两个数据帧,第二个是第一个的子集.现在如何查找第二个数据帧中未包含的第一个数据帧的部分?例如:
new_dataframe_1
A B C D
1 a b c d
2 e f g h
3 i j k l
4 m n o p
new_dataframe_2
A B C D
1 a b c d
3 i j k l
new_dataframe_3 = not intersection of new_dataframe_1 and new_dataframe_2
A B C D
2 e f g h
4 m n o p
谢谢你的帮助!
编辑:我最初称交叉路口为工会,但此后对此进行了更改.
解决方法:
嗯,一种实现方法是使用isin(但是您也可以使用merge命令来实现它……我都展示了示例).例如:
>>> df1
A B C D
0 a b c d
1 e f g h
2 i j k l
3 m n o p
>>> df2
A B C D
0 a b c d
1 i j k l
>>> df1[~df1.isin(df2.to_dict('list')).all(axis=1)]
A B C D
1 e f g h
3 m n o p
说明. isin可以检查是否使用多个列,如果您将其输入字典:
>>> df2.to_dict('list')
{'A': ['a', 'i'], 'C': ['c', 'k'], 'B': ['b', 'j'], 'D': ['d', 'l']}
然后isin将创建一个booleen df,我可以用它来选择我们想要的列(在这种情况下,要求所有列都匹配,然后用?取反):
>>> df1.isin(df2.to_dict('list'))
A B C D
0 True True True True
1 False False False False
2 True True True True
3 False False False False
在特定示例中,我们不需要在数据帧的dict版本中提供数据,因为我们仅通过查看A列即可识别有效行:
>>> df1[~df1['A'].isin(df2['A'])]
A B C D
1 e f g h
3 m n o p
您也可以通过合并来做到这一点.在子集数据框中创建一个唯一列.合并时,较大数据框中的唯一行将为您创建的列具有NaN:
>>> df2['test'] = 1
>>> new = df1.merge(df2,on=['A','B','C','D'],how='left')
>>> new
A B C D test
0 a b c d 1
1 e f g h NaN
2 i j k l 1
3 m n o p NaN
因此,选择test == NaN的行并删除test列:
>>> new[new.test.isnull()].drop('test',axis=1)
A B C D
1 e f g h
3 m n o p
编辑:@ user3654387指出,合并方法对于大型数据帧的性能要好得多.
内容总结
以上是互联网集市为您收集整理的带有Pandas的Python 2.7:如何恢复两个数据帧的非相交部分?全部内容,希望文章能够帮你解决带有Pandas的Python 2.7:如何恢复两个数据帧的非相交部分?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。