我有一些数据集,每个数据集的时间间隔如下:
configStartDate configEndDate
2012-06-07 10:38:01.000 2012-06-11 13:35:25.000
2012-07-12 20:00:55.000 2012-07-17 10:17:53.000
2012-07-18 12:44:15.000 2012-07-20 02:15:47.000
2012-07-20 02:15:47.000 2012-10-05 10:35:19.000
2012-10-05 10:35:19.000 2012-11-13 10:44:24.000
我需要编写一个查询函数(在R中,但我现在只是弄清楚逻辑;在Python中进行原型设计),这需要两个自定义的开始和结束日期,并总结两者之间的间隔。
问题是查询日期可能从中间或时间块之外开始。因此,例如,在上面的示例中,我的查询可能是2012-06-09和2012-11-11的时间间隔,在这种情况下,我必须修改第一个和最后一个块的开始和结束日期。但是,第一个间隔也可以在第二个块等的中间开始,等等。
添加块的代码很简单:
diff_days = (pd.to_datetime(df_41.configEndDate) - pd.to_datetime(df_41.configStartDate)).astype('timedelta64[h]') / 24
print(sum(diff_days))
# 126.541666667 days
但现在我正在寻找最有效的方法来开始和结束自定义查询。
现在我在想的是:
遍历每个configStartDate
,configEndDate
组合:
如果query_start
在特定块的结束日期之前,请将该块设置为第一个包含在计算中的块,并将其开始日期设置为最大值(query_start
,current_start_date
) 。退出循环。
然后对query_end
执行相同但相反的操作(将块的结束日期替换为开始日期,将之前替换为after,并将最大值替换为最小值)。将该块设置为要包括在计算中的最后一个块。退出循环。
在R风格的伪代码中,它看起来像:
ix = which(end_date > start_query)[1]
start_date[ix] = max(start_date[ix], start_query)
chunk[ix] -> first chunk
repeat with end_query, opposite signs
有没有更简单的方法来实现这个? (我不是在寻找具体的代码帮助;只是逻辑建议。)谢谢。