如何计算每小时出现的不同值?



我有一个名为df的数据帧,它看起来像这样:一列timestamp和一列s只有三个可能的值1, 0, -1。现在我想计算每小时有多少1, 0 ,-1。有人可以帮忙吗?谢谢。

timestamp       s
1/6/2018 23:10  0
1/6/2018 23:15  0
1/6/2018 23:23  0
1/6/2018 23:34  0
1/7/2018 0:05   0
1/7/2018 0:09   0
1/7/2018 0:46   0
1/7/2018 0:49   0
1/7/2018 0:49  -1
1/7/2018 0:52  -1
1/7/2018 1:17   1
1/7/2018 1:26   0
1/7/2018 2:16   0
1/7/2018 2:23   1
1/7/2018 2:27   1
1/7/2018 2:34   0
1/7/2018 2:41   1
1/7/2018 2:43   1
1/7/2018 2:49   1

我想要的数据帧如下所示:

timestamp      s_-1 s_0 s_1
1/6/2018 23:00  0   4   0
1/7/2018 0:00   2   4   0
1/7/2018 1:00   0   2   3
1/7/2018 2:00   0   2   5

粒度方法解决方案草图

  1. 在 df 中查找最小的时间戳,并使用 strptime 将 i 转换为日期时间对象 dt
  2. 将小时数定义为hour_start = dt - timedelta(minutes=dt.minute,seconds=dt.second,microseconds=dt.microsecond)
  3. 通过迭代 while 循环并使用 timedelta 递增hour_start+= timedelta(hours=1),并在超过最后一个时间戳时停止,预定义您选择的列表/结构,并在所有小时开始时开始。
  4. 再次遍历数据帧并决定将每个条目放入哪个存储桶

这是一个非常生硬的策略,但你必须完成思考过程,然后自己将其放入代码中。如果您需要更详细地解释,请告诉我。

您可以通过创建截至日期和时间的时间戳字典作为键来接近它。 因此,您的键看起来像[1/6/2018 23], [1/7/2018 0], ...,然后您的值可以是 S 值的列表,然后您可以遍历字典并计数!

最新更新