Amostra de Pandas com data de início

votos
6

Gostaria de fazer uma nova amostra de um objecto pandas usando uma data específica (ou mês) como limite do primeiro caixote do lixo. Por exemplo, no seguinte trecho eu gostaria que o meu primeiro valor de índice fosse 2020-02-29e eu ficaria feliz em especificar start=2ou 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

Até agora, este é o uso pd.cutmais limpo que consigo arranjar e 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 09/06/2020 em 21:14
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Você pode usar o loffset

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

O offset por defeito, a partir da esquerda, é o valor que você quer compensar

Veja mais detalhes nos documentos

As caixas de data acabam como você quer, mas os nossos valores resultantes são diferentes. Vou mergulhar no porquê mais logo à noite, quando puder brincar com o código um pouco mais. Suspeito que tem a ver com a forma como se lida loffsetrealmente com o negócio

Respondeu 11/06/2020 em 22:48
fonte usuário

votos
0

Tudo o que você precisa usar é pd.cutcomo abaixo:

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

não há necessidade de usar groupby

Respondeu 11/06/2020 em 23:23
fonte usuário

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