我正在大型数据帧上计算EMA,但是由于数据不连续,因此无法使用pandas .ewm函数。我希望让我的EMA在每个间隔后都能“重置”。所谓“重置”,是指间隙之后的第一个点的EMA值就是该点的值。 EMA [间隔后的点] = df [间隔后的点]否则,EMA [时间] = df [时间] * alpha + EMA [time-1] *(1-alpha)。
我编写了以下效率很低的代码,我想问一问是否有更好的方法来做到这一点。
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)