2012-11-19 51 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