Je voudrais rééchantillonner un objet pandas en utilisant une date (ou un mois) spécifique comme bord du premier bac. Par exemple, dans l'extrait suivant, j'aimerais que ma première valeur d'index soit 2020-02-29
et je serais heureux de spécifier start=2
ou start=2020-02-29
.
>>> dates = pd.date_range(2020-01-29, 2021-07-04)
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M').count()
2020-01-31 3
2020-05-31 121
2020-09-30 122
2021-01-31 123
2021-05-31 120
2021-09-30 34
Freq: 4M, dtype: int64
Jusqu'à présent, c'est le plus propre que j'ai pu trouver en termes d'utilisation pd.cut
et de groupby
:
>>> rule = 4M
>>> start = pd.Timestamp(2020-02-29) - pd.tseries.frequencies.to_offset(rule)
>>> end = s.index.max() + pd.tseries.frequencies.to_offset(rule)
>>> bins = pd.date_range(start, end, freq=rule)
>>> gb = s.groupby(pd.cut(s.index, bins)).count()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29 32
2020-06-30 122
2020-10-31 123
2021-02-28 120
2021-06-30 122
2021-10-31 4
dtype: int64