簡體   English   中英

Pandas 在固定時間窗口內呈指數加權移動平均線

[英]Pandas exponentially weighted moving average over fixed time window

我正在嘗試使用 pandas ewm 函數進行指數加權移動平均值,其中衰減是根據日期時間列上的半衰期指定的。 Pandas ewm 函數的工作原理與 pandas expand 函數類似,因為它滾動整個數據幀。 但是,在我的情況下,我需要指定一個固定的時間窗口或偏移量,在該時間窗口或偏移量上應用 ewm 函數。 換句話說,一個帶有截止或“max_periods”參數的 ewma。

我對此的解決方案如下:

df = pd.DataFrame({'a': np.random.randint(5, size=24),
                   'b': ["S", "A"] * 12,
                   'c': pd.date_range(start='1/1/2018', end='12/12/2018', freq='15D')})

df.groupby('b').rolling('60d', on='c')['a'].apply(lambda x: x.ewm(halflife='15d', times=x.index).mean().tail(1))

我的解決方案非常低效。 尋找更快的東西。

我想出了以下方法,但是當我計時時它只會稍微快一點。 我很想知道是否有更好的解決方案。

WEIGHTS = [pow(2, i) for i in range(10)]  # at least as many as the size of your window

def weighted_avg(df):
    weights = WEIGHTS[0:len(df)]
    return df.mul(weights).sum() / sum(weights)

df.groupby('b').rolling('60d', on='c')['a'].apply(weighted_avg)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM