Python 计算datetime/numpy中给定的每小时事件数

Python 计算datetime/numpy中给定的每小时事件数,python,datetime,numpy,Python,Datetime,Numpy,假设我有一个时间戳数组(例如,给定为datetime或numpy.datetime64)。此外,每个条目表示一个事件。我想在每小时的基础上记录这些事件;i、 e.计算每小时发生的事件数。有没有直接的方法?一些裸体/熊猫魔术?或者,唯一的方法是将时间戳转换为秒,并按建议将秒存储起来如果您使用的是Pandas,并且您的时间序列具有日期时间索引,则可以使用重采样方法,使用how='count'。例如,在下文中,rng是一系列时间戳,ts是一系列使用rng作为索引的值。(对于您的计算,时间序列中的值无关

假设我有一个
时间戳
数组(例如,给定为
datetime
numpy.datetime64
)。此外,每个条目表示一个事件。我想在每小时的基础上记录这些事件;i、 e.计算每小时发生的事件数。有没有直接的方法?一些裸体/熊猫魔术?或者,唯一的方法是将
时间戳
转换为秒,并按建议将秒存储起来

如果您使用的是Pandas,并且您的时间序列具有日期时间索引,则可以使用
重采样
方法,使用
how='count'
。例如,在下文中,
rng
是一系列时间戳,
ts
是一系列使用
rng
作为索引的值。(对于您的计算,时间序列中的值无关紧要。)在本例中,每小时有360个“事件”,因此除最后一个事件外,每个小时的预期结果为360个

创建一些示例数据:

In [71]: import pandas as pd

In [72]: rng = pd.date_range('1/1/2011', periods=10000, freq='10S')

In [73]: ts = pd.Series(np.random.randint(0, 5, len(rng)), index=rng)

In [74]: ts
Out[74]: 
2011-01-01 00:00:00    2
2011-01-01 00:00:10    0
2011-01-01 00:00:20    1
2011-01-01 00:00:30    4
2011-01-01 00:00:40    1
2011-01-01 00:00:50    1
2011-01-01 00:01:00    2
2011-01-01 00:01:10    0
2011-01-01 00:01:20    3
2011-01-01 00:01:30    4
2011-01-01 00:01:40    2
2011-01-01 00:01:50    4
2011-01-01 00:02:00    1
2011-01-01 00:02:10    0
2011-01-01 00:02:20    4
...
2011-01-02 03:44:10    2
2011-01-02 03:44:20    0
2011-01-02 03:44:30    3
2011-01-02 03:44:40    0
2011-01-02 03:44:50    0
2011-01-02 03:45:00    4
2011-01-02 03:45:10    3
2011-01-02 03:45:20    2
2011-01-02 03:45:30    0
2011-01-02 03:45:40    1
2011-01-02 03:45:50    0
2011-01-02 03:46:00    2
2011-01-02 03:46:10    0
2011-01-02 03:46:20    2
2011-01-02 03:46:30    2
Freq: 10S, Length: 10000
使用
resample
方法计算每小时的事件数。第一个参数,
'H'
,表示我们正在按小时费率重新采样

In [75]: ts.resample('H', how='count')
Out[75]: 
2011-01-01 00:00:00    360
2011-01-01 01:00:00    360
2011-01-01 02:00:00    360
2011-01-01 03:00:00    360
2011-01-01 04:00:00    360
2011-01-01 05:00:00    360
2011-01-01 06:00:00    360
2011-01-01 07:00:00    360
2011-01-01 08:00:00    360
2011-01-01 09:00:00    360
2011-01-01 10:00:00    360
2011-01-01 11:00:00    360
2011-01-01 12:00:00    360
2011-01-01 13:00:00    360
2011-01-01 14:00:00    360
2011-01-01 15:00:00    360
2011-01-01 16:00:00    360
2011-01-01 17:00:00    360
2011-01-01 18:00:00    360
2011-01-01 19:00:00    360
2011-01-01 20:00:00    360
2011-01-01 21:00:00    360
2011-01-01 22:00:00    360
2011-01-01 23:00:00    360
2011-01-02 00:00:00    360
2011-01-02 01:00:00    360
2011-01-02 02:00:00    360
2011-01-02 03:00:00    280
Freq: H, dtype: int64
“…如此处所建议”或此处:请注意,如果将时间戳转换为数组
t
中的秒,则计算结果仅为
numpy.bincount((t/3600).astype(int))