python - 如何在 Pandas 中进行累积分组直到特定条件中断?
问题描述
我有一个数据如下:
User Activity Time(In Mins)
0 1 A 2.00
1 1 B 1.00
2 1 C 1.20
3 1 D 3.00
4 1 A 7.20
5 1 D 0.47
6 1 B 10.00
7 2 A 4.00
8 2 B 6.00
9 2 C 10.00
10 2 F 1.00
11 2 G 2.50
我想参加会议:1 个会议由多项活动组成。如果某些活动超过 5 分钟,则会话中断,之后我必须计算另一个会话。
我有十万的数据,所以我想要最快的方法
所需的输出:
User Activity Time(In Mins) Session
0 1 A 2.00 1
1 1 B 1.00 1
2 1 C 1.20 1
3 1 D 3.00 1
4 1 A 7.20 1
5 1 D 0.47 2
6 1 B 10.00 2
7 2 A 4.00 1
8 2 B 6.00 1
9 2 C 10.00 2
10 2 F 1.00 3
11 2 G 2.50 3
解决方案
使用布尔掩码。首先,找到所有大于 300 秒的值,然后按用户和 分组cumsum
。最后,添加 1 并根据您的预期结果移动所有值:
mask = (df['Time(In Mins)'] // 1 * 60) + (df['Time(In Mins)'] % 1 * 100) > 5 * 60
df['Session'] = mask.groupby(df['User']).cumsum().add(1).shift(fill_value=1)
>>> df
User Activity Time(In Mins) Session
0 1 A 2.00 1
1 1 B 1.00 1
2 1 C 1.20 1
3 1 D 3.00 1
4 1 A 7.20 1
5 1 D 0.47 2
6 1 B 10.00 2
7 2 A 4.00 3
8 2 B 6.00 1
9 2 C 10.00 2
10 2 F 1.00 3
11 2 G 2.50 3
推荐阅读
- java - 如何在 web.xml 上定义为默认 servlet 映射的端点的控制器上获取请求?
- testing - 无法为 x86 项目运行 NUnit 测试
- ios - 使用 NSPersistentCloudKitContainer 在用户之间共享核心数据
- python - 如何修复 pyspark 上的 TF.IDF 函数?
- apache-nifi - 如何使用 NiFi 将字符串转换为 JSON 数组
- jquery - 如何使用ajax从视图中获取控制器中的html
- c++ - 即使使用虚拟析构函数,Google 也会在 EXPECT_CALL 上模拟泄漏
- java - Spring Data 不保存相关实体
- python - 在不同数据框中导入 Excel 中的所有工作表
- calendar - 与同事共享 MS Project 2016 日历