Как выполнить повторную выборку временных рядов с началом координат, выровненным по началу годаPython

Программы на Python
Ответить
Anonymous
 Как выполнить повторную выборку временных рядов с началом координат, выровненным по началу года

Сообщение Anonymous »

Рассмотрим следующую серию pandas с DatatimeIndex ежедневных значений (на примере дня года):

Код: Выделить всё

import pandas as pd

dti = pd.date_range("2017-11-02", "2019-05-21", freq="D", inclusive="both")
s = pd.Series(dti.dayofyear.astype(float), index=dti)

print(s)
# 2017-11-02    306.0
# 2017-11-03    307.0
# 2017-11-04    308.0
# 2017-11-05    309.0
# 2017-11-06    310.0
#               ...
# 2019-05-17    137.0
# 2019-05-18    138.0
# 2019-05-19    139.0
# 2019-05-20    140.0
# 2019-05-21    141.0
# Freq: D, Length: 566, dtype: float64
Как мне преобразовать это значение в средние значения за 3 месяца, где начало координат включает 1 января? Моя лучшая попытка здесь не соответствует ожидаемому источнику, т. е. она отстает на 1 месяц:

Код: Выделить всё

r = s.resample("3MS", origin=dti[0]).mean()

print(r)
# 2017-11-01    226.659341
# 2018-02-01     76.000000
# 2018-05-01    166.500000
# 2018-08-01    258.500000
# 2018-11-01    227.510870
# 2019-02-01     76.000000
# 2019-05-01    131.000000
# Freq: 3MS, dtype: float64
Мой обходной путь — создать новую серию, которая начинается/заканчивается в желаемом диапазоне времени повторной выборки, дополняя несуществующие данные значениями NaN:

Код: Выделить всё

dti2 = pd.date_range("2017-10-01", "2019-06-01", freq="D", inclusive="both")
s2 = pd.Series(index=dti2)
s2[s.index] = s.values
s2.resample("3MS").mean()
r2 = s2.resample("3MS").mean()

print(r2)
# 2017-10-01    335.5
# 2018-01-01     45.5
# 2018-04-01    136.0
# 2018-07-01    227.5
# 2018-10-01    319.5
# 2019-01-01     45.5
# 2019-04-01    116.0
# Freq: 3MS, dtype: float64
но это не интуитивно понятно.

Подробнее здесь: https://stackoverflow.com/questions/798 ... rt-of-year
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»