Скользящее окно со смещением, отличным на Pandas DataFrame с PeriodIndex и DatetimeIndex - PullRequest
0 голосов
/ 13 февраля 2019

При создании DataFrame для панд с ежедневным PeriodIndex и выполнении расчета скользящего окна на основе смещения (например, «5D») результат не соответствует ожидаемому.

Я ожидаю, что скользящее окно будет последними 5 днями, но вместо этого окно, похоже, начинается с начала индекса и увеличивается для каждого элемента.DataFrame с DatetimeIndex

df_datetimeindex = pd.DataFrame([0.5]*10, columns=['data'], index=pd.date_range(start='2019', periods=10, freq='D'))
df_periodindex = pd.DataFrame([0.5]*10, columns=['data'], index=pd.period_range(start='2019', periods=10, freq='D'))
display(
    df_datetimeindex.data.rolling('5D', min_periods=1).sum(),
    df_periodindex.data.rolling('5D', min_periods=1).sum()
)

display(df_datetimeindex.index, df_periodindex.index)
display(df_datetimeindex.data.rolling('5D', min_periods=1), df_periodindex.data.rolling('5D', min_periods=1))

дает

2019-01-01    0.5
2019-01-02    1.0
2019-01-03    1.5
2019-01-04    2.0
2019-01-05    2.5
2019-01-06    2.5
2019-01-07    2.5
2019-01-08    2.5
2019-01-09    2.5
2019-01-10    2.5
Freq: D, Name: data, dtype: float64
2019-01-01    0.5
2019-01-02    1.0
2019-01-03    1.5
2019-01-04    2.0
2019-01-05    2.5
2019-01-06    3.0
2019-01-07    3.5
2019-01-08    4.0
2019-01-09    4.5
2019-01-10    5.0
Freq: D, Name: data, dtype: float64
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
               '2019-01-09', '2019-01-10'],
              dtype='datetime64[ns]', freq='D')
PeriodIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
             '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
             '2019-01-09', '2019-01-10'],
            dtype='period[D]', freq='D')
Rolling [window=432000000000000,min_periods=1,center=False,win_type=freq,axis=0]
Rolling [window=432000000000000,min_periods=1,center=False,win_type=freq,axis=0]

Есть ли объяснение этому поведению, которое я пропустил?

...