如何有效地总结时间范围内的重叠时间间隔?

时间:2019-08-23 15:28:24

标签: python pandas datetime timestamp intervals

我有一本大型词典,其中包含事件(例如类别a,b或c),它们在一天中的开始时间和结束时间都不同。时间戳记间隔的日期经过午夜时可能会有所不同。但是最多两个日期。 示例:

{
'event1': { 
   start_time: 04/05/2016, 04:23:11,
   end_time: 04/05/2016, 04:35:52,
   type: 'a'}
}

我想可视化白天的并发类别数:00:00到23:59。说在08:01,同时有43个类别“ a”事件和22个类别b事件。为此,我想总结一天中每一分钟的并发事件数。

我已经建立了一个有效的示例,但是它效率低下,因此运行缓慢。

  1. 我已经为一天中的每一分钟创建了一个pandas.date_range,并将其设置为一个空数据框的索引。
  2. 然后,我遍历每个事件并提取事件的开始和结束时间,并在to时间之间创建一个pandas.Interval对象。
  3. 我会遍历一天中的所有分钟,并有条件地检查分钟是否在间隔内。如果是这样,请为特定事件计数+1。
  4. 为所有事件重复
zero_data = np.zeros(shape=(1440, 3))
df = pd.DataFrame(zero_data, columns=['a', 'b', 'c'], index=pd.date_range( start='01/01/2019, 00:00', end='01/01/2019, 23:59', freq='1min'))

for k,v in dict:
  ... 'extract the event times' ..
  interval = pd.Interval(pd.Timestamp(start_time), pd.Timestamp(end_time))
  for minute in df.index:
     if minute in interval:
         df.loc[minute, event] = df.loc[minute, event] + 1

出现一些问题:

  • pd.date_range()和pd.Timestamp(start_of_day)总是保留一个日期,这是有问题的,因为隔夜的日期更改使比较变得困难(将时间间隔和日期范围更改为固定日期的笨拙解决方案解决了这一问题)
  • 因为我每次迭代1440次(一天中的分钟)都会变得非常缓慢

我敢肯定,这样做可以更优雅,更快捷。使用日期时间函数可以更高效地直接加入而不是进行迭代。我就是不知道有什么建议吗?

添加了示例输出: enter image description here

0 个答案:

没有答案