使用自定义开始/结束点计算时间间隔

时间:2015-10-02 19:02:49

标签: python r

我有一些数据集,每个数据集的时间间隔如下:

        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

但现在我正在寻找最有效的方法来开始和结束自定义查询。

现在我在想的是:

遍历每个configStartDateconfigEndDate组合:

如果query_start在特定块的结束日期之前,请将该块设置为第一个包含在计算中的块,并将其开始日期设置为最大值(query_startcurrent_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

有没有更简单的方法来实现这个? (我不是在寻找具体的代码帮助;只是逻辑建议。)谢谢。

0 个答案:

没有答案