2012-11-19 3 views
3

팬더는 현재 주어진 날짜에 영업일을 추가 할 수 있습니다. datetime.today() + 3*BDay(). 주말뿐 아니라 휴일의 주어진 DateIndex를 제외하는 업무 일의 아이디어를 확장하고 싶습니다. 그게 가능 DateIndex 오프셋에 통합 할 수 있습니까?휴일 캘린더가있는 팬더의 DateOffset

답변

1

현재 사용자 지정 하위 클래스를 만들어야한다고 생각합니다. 휴일 캘린더를 고려하려면 applyonOffset 메소드를 재정의해야합니다.

비즈니스 -X 주파수에 선택적인 휴일 캘린더 매개 변수를 추가해야합니다. 나는 그것을 추적하기 위해 github의 문제를 만들어 : https://github.com/pydata/pandas/issues/2301 CustomBusinessDay 클래스는 이제 다음과 같이 뭔가를 할 수있을 것 팬더의 곧 0.12 버전에 통합되었습니다

+0

업무 일 기준이 아닌 모든 오프셋에 대해 수행 한 기능이 더 유용하다는 것을 알 수있었습니다. 많은 사람들이 남아 있지 않지만 토요일에는 영업일로 간주하는 곳이 몇 군데 있습니다. 이 경우 일요일과 공휴일을 제외하는 것이 필요할 것입니다. – rhaskett

+0

@rhaskett Github에서 문제에 대한 코드를 작성했습니다. 그것이 당신의 필요를 충족시키는 지보십시오. – snth

+0

numpy의 영리한 사용. 나는 그것이 생산에 부딪 힐 때 한방을 줄 것이다. 덕분에 – rhaskett

3

:

>>> 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

좋아요. 나는 또한 매일 그것을 사용 해왔고 다음과 같은 해결 방법이 일반적으로 트릭을 수행하는 곳을 플로팅하는 것 외에 다른 문제가 없었다. – snth

관련 문제