#python #pandas #dataframe #rolling-computation
#python #pandas #фрейм данных #скользящее вычисление
Вопрос:
У меня есть ежедневный индекс данных pd.DataFrame, по которому я хотел бы вычислять скользящие суммы, используя один календарный год, но это приводит к ошибке ValueError: window must be an integer
.
import pandas as pd
from pandas.tseries.offsets import BDay
start_date = pd.to_datetime('2015-01-01').date()
end_date = pd.to_datetime('2019-12-31').date()
dfo = pd.DataFrame(data=0,
index=pd.date_range(start_date, end_date, freq=BDay()),
columns=['col1', 'col2'])
dfo.index = dfo.index.date
# ... fill in some data and then:
dfo = dfo.rolling('1Y').sum()
приводит к ошибке: ValueError: window must be an integer
Поскольку у меня есть ежедневные данные BD, я мог бы просто использовать окно размером 252, т.Е. Средние торговые дни для бизнеса в год, но для моего варианта использования было бы идеально использовать вместо этого календарный год.
Ответ №1:
Ваш индекс равен object
dtype
. Скользящее окно, использующее интервал времени, ожидает, что фрейм данных будет иметь datetimeindex
. Вы можете просто преобразовать индекс, выполнив:
dfo.index = pd.to_datetime(dfo.index)
И принимая скользящую сумму за год, используя:
dfo.rolling('365D').sum()
Смотрите также https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects чтобы увидеть, какие строки частот можно использовать для указания временного окна перехода.