【发布时间】:2019-01-03 07:57:08
【问题描述】:
有没有办法自定义rolling_mean函数的窗口?
data
1
2
3
4
5
6
7
8
假设窗口设置为 2,即计算包括观察在内的观察前后 2 个数据点的平均值。说第三个观察。在这种情况下,我们将拥有(1+2+3+4+5)/5 = 3。以此类推。
【问题讨论】:
有没有办法自定义rolling_mean函数的窗口?
data
1
2
3
4
5
6
7
8
假设窗口设置为 2,即计算包括观察在内的观察前后 2 个数据点的平均值。说第三个观察。在这种情况下,我们将拥有(1+2+3+4+5)/5 = 3。以此类推。
【问题讨论】:
使用前向(或后向)窗口计算通常的滚动平均值,然后使用shift 方法将其重新居中。
data_mean = pd.rolling_mean(data, window=5).shift(-2)
如果您想在观察前后平均超过 2 个数据点(总共 5 个数据点),请使用 window=5。
例如,
import pandas as pd
data = pd.Series(range(1, 9))
data_mean = pd.rolling_mean(data, window=5).shift(-2)
print(data_mean)
产量
0 NaN
1 NaN
2 3
3 4
4 5
5 6
6 NaN
7 NaN
dtype: float64
作为kadee points out,如果您希望将滚动平均值居中,请使用
pd.rolling_mean(data, window=5, center=True)
【讨论】:
对于更多最新版本的 Pandas(请参阅 0.23.4 文档https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html),您不再有 rolling_mean。相反,您将使用
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
对于您的示例,它将是:
df.rolling(5,center=True).mean()
【讨论】: