Pandas remuestreo con fecha de inicio

votos
6

Me gustaría remuestrear un objeto de pandas usando una fecha específica (o mes) como el borde del primer recipiente. Por ejemplo, en el siguiente recorte me gustaría que mi primer valor índice fuera 2020-02-29y estaría feliz especificando start=2o 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

Hasta ahora, esto es lo más limpio que se me ocurre en cuanto a usos pd.cuty 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
Publicado el 09/06/2020 a las 21:14
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Puedes usarloffset..

>>> dates = pd.date_range("2020-01-29", "2021-07-04")
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M', loffset='1M').count()
2020-02-29      3
2020-06-30    121
2020-10-31    122
2021-02-28    123
2021-06-30    120
2021-10-31     34
Freq: 4M, dtype: int64

La compensación se ajusta a la cantidad que quieres compensar, desde la izquierda

Ver más detalles en los documentos

Las bandejas de fechas terminan de la manera que usted quiere, pero nuestros valores resultantes difieren. Me sumergiré en el porqué más tarde esta noche cuando pueda jugar con el código un poco más. Sospecho que tiene que ver con la forma loffseten que se manejan los contenedores

Respondida el 11/06/2020 a las 22:48
fuente por usuario

votos
0

Todo lo que necesitas usar es pd.cutcomo abajo:

>>> gb = pd.cut(s.index, bins).value_counts()
>>> 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

no hay necesidad de usar groupby

Respondida el 11/06/2020 a las 23:23
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more