Игнорирование нескольких NaN при расчете стандартного отклонения - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий фрейм данных панд, который содержит 5-минутные внутридневные данные.DeltaBetweenClose - NaN для первого торгового бара в день открытия рынка (9:30 EST).

    time     Date       symbol    DeltaBetweenClose 
    9:35    2017-07-17  spy        NaN 
    9:40    2017-07-17  spy       -1.2                     
    ..........................................
    ..........................................    
    16:00   2018-07-17  spy        1.7
    9:35    2017-07-18  spy        NaN
    9:40    2017-07-18  spy        0.3                      
    ..........................................
    ..........................................        
    9:35    2018-07-17  nflx       NaN

Я пытаюсь создать столбец CloseDelta_sd, который вычисляет скользящее стандартное отклонение столбца DeltaBetweenClose, сгруппированного по symbol с, который просматривает предыдущие 30 баров и вычисляет стандартное отклонение при игнорировании NaN s.Моя следующая попытка возвращает все NaN с.Он работает, когда в верхней части столбца DeltaBetweenClose находится только один NaN.

df['CloseDelta_sd'] = df.groupby('symbol').DeltaBetweenClose.transform(lambda x: x.rolling(30).std())

1 Ответ

0 голосов
/ 14 сентября 2018

Проблема не в std, поскольку по умолчанию она пропускает NaN, а вместо rolling.

Вам необходимо использовать параметр min_periods:

Минимальное количество наблюдений в окне, которое должно иметь значение (в противном случае результат равен NA). Для окна, заданного смещением, по умолчанию используется значение 1.

Поскольку вы предоставляете int вместо смещения, у вас будет множество NaN групп, исправление очень простое:

(df.groupby('symbol').DeltaBetweenClose
    .transform(lambda x: x.rolling(30, min_periods=1).std()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...