Я рассчитываю 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)