Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算每个小时内出现的不同值?_Python - Fatal编程技术网

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

Python 如何计算每个小时内出现的不同值?,python,Python,我有一个名为df的数据帧,它看起来像这样:一列是时间戳,一列是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

我有一个名为
df
的数据帧,它看起来像这样:一列是
时间戳
,一列是
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/6/2018 23],[1/7/2018 0],…
,然后您的值可以是一个s值列表,然后您可以遍历字典并计数

粗粒度方法解决方案草图:
  • 在df中找到最小的时间戳,并使用strtime将i转换为datetime对象dt
  • 将小时开始定义为
    hour\u start=dt-timedelta(分钟=dt.minute,秒=dt.second,微秒=dt.microsond)
  • 通过使用while循环进行迭代并递增hour,预先定义您选择的列表/结构,以所有小时的开头。\u从timedelta开始,作为
    +=timedelta(hours=1)
    ,并在超过最后一个时间戳时停止
  • 再次循环数据帧并决定将每个条目放在哪个bucket中

  • 这是一个非常直截了当的策略,但您必须完成思考过程,然后自己将其转化为代码。如果您有什么需要详细解释的,请告诉我。

    您具体尝试了什么?这不是一个代码编写服务,我们的期望是您实际上已经首先尝试了一些东西。请用所有相关的细节、代码和错误信息编辑您的问题。如果您不知道如何开始,请用纸和笔找出您需要做的事情,并将问题分解为多个部分。例如,首先您将创建一个位置来存储每小时的计数,然后您将查看每一行从时间戳确定小时,然后查看值,最后添加一个计数。@ScrapsedCola:对不起,如果我似乎期待代码编写服务,我做了研究,但没有找到线索。无论如何,帕克斯·沃比斯库姆的回答帮助了我。谢谢帕克斯的素描,它真的很有帮助!