2012-10-22 17 views

risposta

11

Utilizzare BDay() per ottenere i giorni lavorativi nel raggio d'azione.

from pandas.tseries.offsets import * 

In [185]: s 
Out[185]: 
2011-01-01 -0.011629 
2011-01-02 -0.089666 
2011-01-03 -1.314430 
2011-01-04 -1.867307 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-08 0.800262 
2011-01-09 0.376406 
2011-01-10 -0.469988 
Freq: D 

In [186]: s.asfreq(BDay()) 
Out[186]: 
2011-01-03 -1.314430 
2011-01-04 -1.867307 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-10 -0.469988 
Freq: B 

con affettare:

In [187]: x=datetime(2011, 1, 5) 

In [188]: y=datetime(2011, 1, 9) 

In [189]: s.ix[x:y] 
Out[189]: 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-08 0.800262 
2011-01-09 0.376406 
Freq: D 

In [190]: s.ix[x:y].asfreq(BDay()) 
Out[190]: 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
Freq: B 

e count()

In [191]: s.ix[x:y].asfreq(BDay()).count() 
Out[191]: 3 
+0

wow .. perfetto! Grazie mille! –

17

È inoltre possibile utilizzare date_range per questo scopo.

In [3]: pd.date_range('2011-01-05', '2011-01-09', freq=BDay()) 

Out[3]: DatetimeIndex(['2011-01-05', '2011-01-06', '2011-01-07'], dtype='datetime64[ns]', freq='B', tz=None) 

EDIT

O ancora più semplice

In [7]: pd.bdate_range('2011-01-05', '2011-01-09') 

Out[7]: DatetimeIndex(['2011-01-05', '2011-01-06', '2011-01-07'], dtype='datetime64[ns]', freq='B', tz=None) 

Nota che entrambi inizio e sono comprensivi date di fine. Fonte: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.bdate_range.html

10

Basta essere attenti quando si usano bdate_range o BDay() - il nome potrebbe trarre in inganno a pensare che si tratta di una serie di giorni lavorativi, mentre in realtà è solo giorni di calendario a fine settimana spogliato fuori (cioè. non tiene conto delle festività).

14

A partire dalla v0.14 è possibile utilizzare i calendari delle festività.

 
from pandas.tseries.holiday import USFederalHolidayCalendar 
from pandas.tseries.offsets import CustomBusinessDay 

us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar()) 
print pd.DatetimeIndex(start='2010-01-01',end='2010-01-15', freq=us_bd) 

rendimenti:

 
DatetimeIndex(['2010-01-04', '2010-01-05', '2010-01-06', '2010-01-07', 
       '2010-01-08', '2010-01-11', '2010-01-12', '2010-01-13', 
       '2010-01-14', '2010-01-15'], 
       dtype='datetime64[ns]', freq='C') 
+1

se si desidera il numero di giorni tra l'intervallo di date, è possibile ottenere questo come 'pd.DatetimeIndex (start = '2010-01-01', end = '2010-01-15', freq = us_bd) .shape [ 0] ' – tsando

Problemi correlati