所以我可以用蛮力做到这一点,但是它的速度很慢,所以我确定我错过了一些东西。
假设我要创建一个固定长度的(每天)DatetimeIndex,例如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天的时间。该指数计算周末(但不使用周末),并且仅当计算值落在周末时才必须在周五之前结束。
上面显然是一团糟。我希望有一种更干净的方法来做到这一点,特别是避免预先构建比我需要的索引长的索引,以及避免多个中间列表的构建?