计算带有删节日期的熊猫DatetimeIndex的有效方法

时间:2018-07-17 01:27:49

标签: pandas datetimeindex

所以我可以用蛮力做到这一点,但是它的速度很慢,所以我确定我错过了一些东西。

假设我要创建一个固定长度的(每天)DatetimeIndex,例如15天,但有一些警告:

  • 如果15天索引在周末结束,那么它实际上在索引的最后一个星期五结束,并且
  • 如果15天期间包含审查日期,则审查日期不计入15天计数。审查日期可以远远超过15天。

要详细说明第2点,假设我从2018年1月1日开始,但是审查了2018年1月12日至2018年2月14日,因此我的15天期限可能是(暴力法):

possible = pd.date_range(start='2018-01-01', end='2018-12-31')
censored = pd.date_range(start='2018-01-12', end='2018-02-14')

bforce = pd.DatetimeIndex(set(possible)\
            .difference(set(censored)))\
            .sort_values()[:15]

idx = pd.DatetimeIndex([d for d in bforce if d.weekday() not in (5,6)])

给出:

DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
               '2018-01-05', '2018-01-08', '2018-01-09', '2018-01-10',
               '2018-01-11', '2018-02-15', '2018-02-16'],
              dtype='datetime64[ns]', freq=None)

这是正确的。请注意,我已经在最终索引中忽略了所有周末,但是没有将它们包括在审查日期值中,因为这将通过实际上不计算周末的方式来推迟15天的时间。该指数计算周末(但不使用周末),并且仅当计算值落在周末时才必须在周五之前结束。

上面显然是一团糟。我希望有一种更干净的方法来做到这一点,特别是避免预先构建比我需要的索引长的索引,以及避免多个中间列表的构建?

0 个答案:

没有答案