python中的每月滚动平均值,滞后1个月



我已经为我的数据计算了月度滚动平均值,但计算有一个月的滞后(延迟(,因此如果我们在10月份,结果需要提供9月份的月度平均值,以此类推。考虑到这种滞后,我可以在滚动平均数中添加什么参数?

history_data_resampled.rolling(window = 12).mean()

有多种方法可以实现这一点。我假设history_data_resampled有一天的频率,并且您使用的是pandas:

import pandas as pd
import numpy as np
# == Generating Random DataFrame ===============================
dates = pd.period_range('2021-01-01', '2022-12-31', freq='d')
random_values = np.random.randint(0, 120, dates.shape[0])
df = pd.DataFrame({'date': dates, 'value': random_values})
# == Moving average =============================================
# Generating a monthly average, with a period of 12 months, and 1 month of lag:
df.set_index('date').resample("1M")['value'].sum().rolling(12).mean()
# Outputs:
"""
date
2021-01            NaN
2021-02            NaN
2021-03            NaN
2021-04            NaN
2021-05            NaN
2021-06            NaN
2021-07            NaN
2021-08            NaN
2021-09            NaN
2021-10            NaN
2021-11            NaN
2021-12    1644.750000
2022-01    1648.416667
2022-02    1663.583333
2022-03    1696.166667
2022-04    1747.666667
2022-05    1766.750000
2022-06    1783.166667
2022-07    1825.083333
2022-08    1814.166667
2022-09    1792.250000
2022-10    1809.833333
2022-11    1789.166667
2022-12    1798.166667
Freq: M, Name: value, dtype: float64
"""

在上面的例子中,我们将数据重新采样到每月一次的频率,将同一个月的所有值相加,然后计算每个月前12个月的平均值。我们使用.resample("1M")['value'].sum()将特定月份的所有观测值相加。

请注意,在'2021-11'之前,我们无法计算任何值,因为我们的数据要求我们在数据集中有来自'2020'的值。

最新更新