b.sum () возвращает 0, а b.rolling (2) .sum () возвращает nan, где b = pd.Series ([np.nan, np.nan]) - PullRequest
1 голос
/ 14 апреля 2020

pandas.sum() пропустит NaN по умолчанию, поэтому я ожидаю, что b.rolling(2).sum() также заменит NaN на 0. Однако b.rolling(2).sum() дает NaN вместо 0, где b = pd.Series([np.nan, np.nan]).

1 Ответ

1 голос
/ 14 апреля 2020

Метод DataFrame.rolling принимает параметр min_periods, который по умолчанию равен размеру окна. До тех пор, пока не будет накоплено много не пропущенных значений, при скользящем расчете значения будут пропущены. Все ваши значения отсутствуют, поэтому при вычислении никогда не будут накапливаться 2 значения.

Для этого случая только для NaN вы можете просто установить параметр на 0.

pd.Series([np.NaN, np.NaN]).rolling(2, min_periods=0).sum()                                                                                                                                                                         
# 0    0.0
# 1    0.0

Но это также изменить поведение для ряда, в котором присутствуют первые два значения . Он оставит первое значение на месте, не пустым, чтобы указать, что в скользящей сумме еще не было 2 значений.

pd.Series([1, 2]).rolling(2).sum()                                                                                                                                                                                                  
# 0    NaN
# 1    3.0

pd.Series([1, 2]).rolling(2, min_periods=0).sum()                                                                                                                                                                                   
# 0    1.0
# 1    3.0

Чтобы избежать этого, мне нужно знать больше о вашем сценарии использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...