Pandas a une assez belle fonctionnalité jour ouvrable construit qui va gérer automatiquement. Pour ce problème précis, il finit par être un peu plus de code, mais il va gérer un cas beaucoup plus général très facilement.
In [1]: ind = pd.date_range('2008-06-02', '2008-06-12', freq='B')
In [2]: p = pd.Series(np.random.random(len(ind)), index=ind)
In [3]: p
Out[3]:
2008-06-02 0.606132
2008-06-03 0.328327
2008-06-04 0.842873
2008-06-05 0.272547
2008-06-06 0.013640
2008-06-09 0.357935
2008-06-10 0.517029
2008-06-11 0.992851
2008-06-12 0.053158
Freq: B, dtype: float64
In [4]: t0 = pd.Timestamp('2008-6-6')
In [5]: from pandas.tseries import offsets
In [6]: delta = offsets.BDay(2)
Cela créera un décalage de deux jours ouvrables. Vous pouvez également effectuer des décalages arbitraires d'autres unités de temps, ou même des combinaisons d'unités de temps. Maintenant, avec le point de départ et le delta, vous pouvez découper intelligemment de façon standard:
In [7]: p[t0 - delta:t0 + delta]
Out[7]:
2008-06-04 0.842873
2008-06-05 0.272547
2008-06-06 0.013640
2008-06-09 0.357935
2008-06-10 0.517029
Freq: B, dtype: float64
La bonne chose à propos de cette approche est que l'intervalle ne soit pas lié au nombre de lignes. Donc, par exemple, si vous avez des données horaires et peut-être quelques points manquants, vous pouvez toujours capturer deux jours ouvrables exactement de la même manière. Ou si votre source de données contenait des données de week-end, mais que vous vouliez toujours +/- 2 jours ouvrables.