假设我有以下数据。
我要标记彼此之间180个工作日内的所有条目。
1 2009-01-16
2 2010-01-22
3 2010-02-26
4 2010-06-18
5 2013-09-11
Name: date, dtype: datetime64[ns]
在正常的 天内,我已经可以通过一些diff
的移位和布尔逻辑来做到这一点,但对于商务场合则不能,如下所示:
def check_dates(l):
OVERLAP_DT = 180 # edited
diff0 = l.diff(periods=-1).fillna(pd.Timedelta('528491 hours')) # filler for some number greater than 180 days for NAs
diff1 = l.diff(periods=1).fillna(pd.Timedelta('528491 hours'))
return ((np.abs(diff0.dt.days) > OVERLAP_DT) & (np.abs(diff1.dt.days) > OVERLAP_DT)).astype(int)
以上内容输出以下内容,其中1
为“好,继续”,并且在几天内正确。但是,我不确定如何在工作日内完成这项工作。
1 1
2 0
3 0
4 0
5 1
Name: Announcement_Date, dtype: int32
编辑:将索引从原始副本更改为1, 2, 3, ...
,因为这很令人困惑。
答案 0 :(得分:0)
也许您可以尝试以下方法:
'1/1/2018' in pd.bdate_range(start = '1/1/2018', periods = 180)
答案 1 :(得分:0)
我相信您正在寻找:
df.Date > df.Date.shift() + pd.tseries.offsets.BDay(180)
下面的输出比您的输出更有意义,即179和955的日期不在前一天规定的180 bday窗口之内。
19 False
179 True
194 False
261 False
955 True
Name: Date, dtype: bool
或者,如果您想标记第19天和261天:
df.Date < df.Date.shift(-1) - pd.tseries.offsets.BDay(180)
并输出:
19 True
179 False
194 False
261 True
955 False
Name: Date, dtype: bool