0
查看pandas.rolling()docs,您会看到以下注释:
By default, the result is set to the right edge of the window. This can be changed to the center of the window by setting center=True.
这意味着默认情况下,滚动窗口不以其计算平均值为中心。
让我们来看一个例子。我们有一个简单的DataFrame:
In [2]: ones_matrix = np.ones((5,1))
...: ones_matrix[:,0] = np.array([i+1 for i in range(ones_matrix.shape[0])])
...: index = [chr(ord('A')+i) for i in range(ones_matrix.shape[0])]
...: df = pd.DataFrame(data = ones_matrix,columns=['Value'],index=index)
...: df
Out[2]:
Value
A 1.0
B 2.0
C 3.0
D 4.0
E 5.0
现在让我们滚动3号窗口。(请注意,我明确写了参数center = False,但这是调用df.rolling()的默认值)
In [3]: rolled_df = df.rolling(window=3,center=False).mean()
...: rolled_df
Out[3]:
Value
A NaN
B NaN
C 2.0
D 3.0
E 4.0
前两行是NaN,而最后的点保留在那里。例如,如果您在索引为C的行上注意到,则滚动后的值为2。但在3点之前。这意味着该索引的新值是对索引分别为{1,2,3}的索引为{A,B,C}的行进行平均的结果。
因此,在计算该位置的平均值时,您可以看到窗口不在索引C的中心,而是在索引B的中心。
您可以通过设置centered = True来更改它,从而输出预期的行为:
In [4]: centred_rolled_df = df.rolling(window=3,center=True).mean()
...: centred_rolled_df
Out[4]:
Value
A NaN
B 2.0
C 3.0
D 4.0
E NaN
收藏