2012-11-19 126 views
3

熊猫目前允许您将工作日添加到给定日期datetime.today() + 3*BDay()。我想延长一个营业日的想法,以排除假期和周末的给定日期索引。这可能将一个DateIndex合并到一个偏移量中吗?带有假日日历的熊猫日期补偿

回答

1

目前我认为你需要创建一个自定义的子类。您需要覆盖applyonOffset方法来考虑您的假期日历。

最终,我们应该在business-X频率中添加一个可选的假期日历参数。我做了一个GitHub的问题,以保持它的轨道:https://github.com/pydata/pandas/issues/2301

+0

如果所有偏移量而不仅仅是工作日,我可以看到该功能更有用。剩下的不多,但还有几个地方还在周六考虑一个工作日。因此,在这种情况下,排除星期日和节假日的事情是必要的。 – rhaskett

+0

@rhaskett我在Github上为这个问题贡献了一些代码。看看它是否符合你的需求。 – snth

+0

巧妙地使用numpy。当它遇到生产时我会尝试一下。谢谢 – rhaskett

3

的CustomBusinessDay类现在已经合并到大熊猫即将0.12版本,你就可以做一些类似如下:

>>> from pandas.tseries.offsets import CustomBusinessDay 
>>> 
>>> # As an interesting example, let's look at Egypt where 
>>> # a Friday-Saturday weekend is observed. 
>>> weekmask_egypt = 'Sun Mon Tue Wed Thu' 
>>> 
>>> # They also observe International Workers' Day so let's 
>>> # add that as a holiday for a couple of years 
>>> holidays = ['2012-05-01', datetime(2013, 5, 1), np.datetime64('2014-05-01')] 
>>> 
>>> bday_egypt = CustomBusinessDay(holidays=holidays, weekmask=weekmask_egypt) 
>>> dt = datetime(2013, 4, 30) 
>>> print dt + 2 * bday_egypt 
2013-05-05 00:00:00 
>>> 
>>> dts = date_range(dt, periods=5, freq=bday_egypt).to_series() 
>>> print dts 
2013-04-30 2013-04-30 00:00:00 
2013-05-02 2013-05-02 00:00:00 
2013-05-05 2013-05-05 00:00:00 
2013-05-06 2013-05-06 00:00:00 
2013-05-07 2013-05-07 00:00:00 
Freq: C, dtype: datetime64[ns] 
>>> 
>>> print Series(dts.weekday, dts).map(Series('Mon Tue Wed Thu Fri Sat Sun'.split())) 
2013-04-30 Tue 
2013-05-02 Thu 
2013-05-05 Sun 
2013-05-06 Mon 
2013-05-07 Tue 
dtype: object 

HTH

+0

作品很有魅力 – rhaskett

+0

太棒了。我也一直在使用它,并没有任何问题,除了绘制以下解决方法通常可以实现的技巧之外:'custom_series.asfreq('B',method ='pad')。plot()' – snth