python – 从大型Pandas DataFrame中删除行的快速有效方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从大型Pandas DataFrame中删除行的快速有效方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2737字,纯文字阅读大概需要4分钟。
内容图文
![python – 从大型Pandas DataFrame中删除行的快速有效方法](/upload/InfoBanner/zyjiaocheng/805/d66f391e6fcc410dbbb9b3c44c67409b.jpg)
我希望从大型Pandas DataFrame中删除行,其中包含基于用户在网站上执行的操作/事件的分析数据.所有用户操作流都以start事件开始,并以end事件结束.我想查找已完成特定事件的所有用户(例如注册 – 示例数据框中的索引13)并删除该事件之后的所有事件,直到(并包括)结束事件.因此,在此示例中,必须从数据框中删除已查看的博客帖子,页面视图,访问过的网站,广告活动点击,已查看的博客帖子,访问过的网站,页面视图和结束.
In [26]: data
Out[26]:
event user
0 start user1
1 visited blog user1
2 page view user1
3 visited blog user1
4 viewed blog post user1
5 ad campaign hit user1
6 page view user1
7 visited site user1
8 visited blog user1
9 viewed blog post user1
10 visited site user1
11 page view user1
12 signed up user1
13 viewed blog post user1
14 page view user1
15 visited site user1
16 ad campaign hit user1
17 viewed blog post user1
18 visited site user1
19 page view user1
20 end user1
我尝试过多种方式 – 使用np.where()来识别正确的行或
removal_starts_at = data[(data.user == 'user1') & (data.event == 'signed up')]
removal_ends_at = data[(data.user == 'user1') & (data.event == 'end')]
data[data.user == 'user1'].drop(data.index[removal_start_at+1:removal_ends_at+1], inplace=True)
但是,这真的很慢!每个用户需要大约20秒.我有1000个用户,所以效率不高.如果可能的话,我想要以更快的方式做到这一点.
我在撰写这个问题时发现了另一个问题:
如果我不包括[data.user ==’user1′]来对数据帧进行子集化,那么它会变得疯狂并占用计算机上的所有内存.如果我确实包含它,它实际上不会进行子集化并给我一个关于SettingWithCopy的警告.
我对Pandas比较陌生,所以很可能有一种更简单的方法可以做到这一点而且我只是完全错误地做了.我想过的想法是使用MultiIndex找到用户和组合的组合.事件直接或可能以更有效的方式进行子集化?
解决方法:
如果我理解正确,那么你的想法就是在一个数据框中有很多用户.所以我把它扩展为有2个用户.如果这是对的,那么这样的事情应该很快:
df['keep'] = np.where( df['event'] == 'start', 1, np.nan )
df['keep'] = np.where( df['event'].shift() == 'signed up', 0, df['keep'] )
df['keep'] = df['keep'].ffill()
event user keep
0 start user1 1
1 visited blog user1 1
2 page view user1 1
3 signed up user1 1
4 viewed blog post user1 0
5 page view user1 0
6 end user1 0
7 start user2 1
8 visited blog user2 1
9 signed up user2 1
10 viewed blog post user2 0
11 end user2 0
df[df['keep']==1]
event user keep
0 start user1 1
1 visited blog user1 1
2 page view user1 1
3 signed up user1 1
7 start user2 1
8 visited blog user2 1
9 signed up user2 1
内容总结
以上是互联网集市为您收集整理的python – 从大型Pandas DataFrame中删除行的快速有效方法全部内容,希望文章能够帮你解决python – 从大型Pandas DataFrame中删除行的快速有效方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。