【发布时间】:2018-08-20 18:18:42
【问题描述】:
我想我最好通过一个例子来解释我想要实现的目标。假设我有这个数据框:
time
0 2013-01-01 12:56:00
1 2013-01-01 12:00:12
2 2013-01-01 10:34:28
3 2013-01-01 09:34:54
4 2013-01-01 08:34:55
5 2013-01-01 16:35:19
6 2013-01-01 16:35:30
我想给定一个间隔 T,计算每一行在该间隔内“打开”了多少个寄存器。例如,考虑到 T = 2hours,这将是输出:
time count
0 2013-01-01 12:56:00 1 # 12:56-2 = 10:56 -> 1 register between [10:56, 12:56)
1 2013-01-01 12:00:12 1
2 2013-01-01 10:34:28 2 # 10:34:28-2 = 8:34:28 -> 2 registers between [8:34:28, 10:34:28)
3 2013-01-01 09:34:54 1
4 2013-01-01 08:34:55 0
5 2013-01-01 16:35:19 0
6 2013-01-01 16:35:30 1
我想知道如何使用 pandas 获得此结果。如果我只考虑 dt.hour 存取器,例如 T 等于 1,我可以每小时创建一个列计数,然后将其移动 1,将count[i] + count[i-1] 的结果相加。但我不知道是否可以将其概括为所需的输出。
【问题讨论】:
-
我不明白你是如何定义这些间隔的。如何在 12:56 前的 2 小时内获得
[10:56, 12:45],而不是[10:56, 12:56)? -
您提出的解决方案是如何工作的?如果您按小时计算,这意味着 12:56 和 12:04 最终将在同一个桶中,您将无法区分 12:56 之前的 2 小时和 2 小时之前到 12:04——他们都将包括在 10:34 开放的那个,尽管这仅对后者是正确的(我认为)。
-
你是对的,@abarnert。它只是按小时对行进行分组。
标签: python sql pandas time-series