Python Pandas – 基于先前获取的子集从DataFrame中删除行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Pandas – 基于先前获取的子集从DataFrame中删除行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2181字,纯文字阅读大概需要4分钟。
内容图文
我正在运行安装了Pandas 0.11.0库的Python 2.7.
我一直在寻找一个没有找到这个问题的答案,所以我希望有人比我有解决方案更有经验.
让我们说我的数据,在df1中,如下所示:
DF1 =
zip x y access
123 1 1 4
123 1 1 6
133 1 2 3
145 2 2 3
167 3 1 1
167 3 1 2
例如,使用df2 = df1 [df1 [‘zip’] == 123]然后df2 = df2.join(df1 [df1 [‘zip’] == 133])我得到以下数据子集:
DF2 =
zip x y access
123 1 1 4
123 1 1 6
133 1 2 3
我想做的是:
1)从df1中删除行,因为它们是用df2定义/连接的
要么
2)创建df2后,从df2中删除行(差异?),df2由df2组成
希望所有这一切都有道理.如果需要更多信息,请告诉我.
编辑:
理想情况下,第三个数据框将是创建的,如下所示:
DF2 =
zip x y access
145 2 2 3
167 3 1 1
167 3 1 2
也就是说,df1中的所有内容都不在df2中.谢谢!
解决方法:
我想到了两种选择.首先,使用isin和一个掩码:
>>> df
zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2
>>> keep = [123, 133]
>>> df_yes = df[df['zip'].isin(keep)]
>>> df_no = df[~df['zip'].isin(keep)]
>>> df_yes
zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3
>>> df_no
zip x y access
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2
其次,使用groupby:
>>> grouped = df.groupby(df['zip'].isin(keep))
然后任何一个
>>> grouped.get_group(True)
zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3
>>> grouped.get_group(False)
zip x y access
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2
>>> [g for k,g in list(grouped)]
[ zip x y access
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2, zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3]
>>> dict(list(grouped))
{False: zip x y access
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2, True: zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3}
>>> dict(list(grouped)).values()
[ zip x y access
3 145 2 2 3
4 167 3 1 1
5 167 3 1 2, zip x y access
0 123 1 1 4
1 123 1 1 6
2 133 1 2 3]
哪个最有意义取决于上下文,但我认为你明白了.
内容总结
以上是互联网集市为您收集整理的Python Pandas – 基于先前获取的子集从DataFrame中删除行全部内容,希望文章能够帮你解决Python Pandas – 基于先前获取的子集从DataFrame中删除行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。