Пандас повторно образец с датой начала

голоса
6

Я хотел бы перепробовать объект панды, используя определенную дату (или месяц) в качестве края первого мусорного контейнера. Например, в следующем фрагменте я бы хотел, чтобы мое первое значение индекса было 2020-02-29и я был бы счастлив указать start=2или 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

Пока это самое чистое, что я могу придуматьpd.cutgroupby:

>>> 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
Задан 09/06/2020 в 21:14
источник пользователем
На других языках...                            


2 ответов

голоса
0

Вы можете использовать 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

Смещение по умолчанию - это то, на сколько вы хотите сместить слева

Подробнее см. в документах

Массивы даты заканчиваются так, как вы хотите, но наши результирующие значения отличаются. Я погружусь в вопрос, почему сегодня вечером, когда я смогу немного поиграть с кодом. Я подозреваю, что это связано с тем, как на loffsetсамом деле справляется с бинингом

Ответил 11/06/2020 в 22:48
источник пользователем

голоса
0

Все, что вам нужно использовать, pd.cutкак показано ниже:

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

нет необходимости использовать groupby

Ответил 11/06/2020 в 23:23
источник пользователем

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