как рассчитывается pandas rolling std?

#python #pandas

#python #pandas

Вопрос:

Я использую.rolling(5).std() для получения серии std в окне (size=5, a — pd.Series)

но я обнаружил, что результат — это не то, чего я хочу.

вот пример:

 In [15]: a = [-49, -50, -50, -51, -48]

In [16]: pd.Series(a).rolling(5).std()
Out[16]: 
0         NaN
1         NaN
2         NaN
3         NaN
4    1.140175
dtype: float64

In [17]: np.std(a)
Out[17]: 1.0198039027185568
 

Я думаю, что последний элемент pd.Series(a).rolling(5).std() должен быть равен np.std(a),

но почему это не так?

Ответ №1:

Вероятно, это связано с тем, что Pandas нормализуется с помощью N - 1 вместо N . Смотрите первую заметку по адресу https://pandas.pydata.org/docs/reference/api/pandas.core.window.rolling .Rolling.std.html

Вы можете изменить это поведение, используя аргумент степеней свободы ddof , например pd.Series(a).rolling(5).std(ddof=0) .