Эффективное экспоненциальное скользящее среднее в Python при наличии промежутков времени - PullRequest
0 голосов
/ 21 сентября 2018

Я рассчитываю EMA на большом фрейме данных, однако я не могу использовать функцию pewas .ewm, поскольку у меня есть разрывы в моих данных.Я хочу, чтобы моя EMA "сбрасывалась" после каждого пробела.Под «сбросом» я подразумеваю, что значение EMA первой точки после разрыва является просто значением точки.EMA [точка после разрыва] = df [точка после разрыва] в противном случае EMA [время] = df [время] * альфа + EMA [время-1] * (1-альфа).

Я написал следующее оченьнеэффективный код, и я хотел спросить, есть ли лучший способ сделать это.

def emaFrame(df, emaAlpha = 0.5):
    df = df.copy()
    df.reset_index(inplace = True)

    df['dtPrev'] = df['date'] - df['date'].shift(1)
    df['Check'] = df['dtPrev'] == datetime.timedelta(minutes=60)

    for index, row in df.iloc[1:].iterrows():
        if row['Check']:
           df.loc[index] = df.loc[index] * emaAlpha + df.loc[index-1] * (1-emaAlpha)

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