【发布时间】:2020-12-01 20:55:52
【问题描述】:
我有一个数据集,我想按小时计算每天有多少供应商在线。数据框如下所示 -
provider_id event_time final_status rank
325 0037dfffff8b03bbdf366a263735e84b 2017-09-04 08:00:19 online 1
326 0037dfffff8b03bbdf366a263735e84b 2017-09-04 08:29:39 online 2
327 0037dfffff8b03bbdf366a263735e84b 2017-09-04 08:44:36 offline 3
328 0037dfffff8b03bbdf366a263735e84b 2017-09-04 09:06:12 online 4
330 0037dfffff8b03bbdf366a263735e84b 2017-09-04 12:23:24 online 5
331 0037dfffff8b03bbdf366a263735e84b 2017-09-04 12:23:47 offline 6
332 0037dfffff8b03bbdf366a263735e84b 2017-09-04 12:45:46 online 7
333 0037dfffff8b03bbdf366a263735e84b 2017-09-04 12:45:56 offline 8
334 0037dfffff8b03bbdf366a263735e84b 2017-09-04 17:38:31 online 9
335 0037dfffff8b03bbdf366a263735e84b 2017-09-04 17:40:51 online 10
示例输出将是这样的。在这里,如果我们查看前 3 行,我们可以看到提供者在线从 2017-09-04 08:00:19 到 2017-09-04 08:44:36。然后他一直离线直到2017-09-04 09:06:12,然后继续在线直到2017-09-04 12:23:24。这就是计算其余seconds_online 值的方式。
provider_id day start_hour end_hour seconds_online
0 0037dfffff8b03bbdf366a263735e84b 2017-09-04 8 9 2657
1 0037dfffff8b03bbdf366a263735e84b 2017-09-04 9 10 3228
2 0037dfffff8b03bbdf366a263735e84b 2017-09-04 10 11 3600
3 0037dfffff8b03bbdf366a263735e84b 2017-09-04 11 12 3600
4 0037dfffff8b03bbdf366a263735e84b 2017-09-04 12 13 2746
5 0037dfffff8b03bbdf366a263735e84b 2017-09-04 13 14 10
6 0037dfffff8b03bbdf366a263735e84b 2017-09-04 14 15 0
7 0037dfffff8b03bbdf366a263735e84b 2017-09-04 15 16 0
8 0037dfffff8b03bbdf366a263735e84b 2017-09-04 16 17 0
9 0037dfffff8b03bbdf366a263735e84b 2017-09-04 17 18 140
10 0037dfffff8b03bbdf366a263735e84b 2017-09-04 18 19 0
使用for loop,这很容易,但数据集目前有超过 2000 万行。使用for 不是优化的解决方案。它正在显示,大约需要 7 天的时间。有人可以帮忙吗??
【问题讨论】:
标签: python python-3.x pandas numpy dataframe