簡體   English   中英

獲取滾動窗口是增加還是減少

[英]Get if a rolling window is increasing or decreasing

我有一個熊貓的DataFrame ,我想為移動窗口沿其列之一的每個間隔計算該間隔內的數據是增加還是減少。 對於增加/減少,我的意思是計算最后一個元素的符號減去第一個元素。

現在,我有此解決方案:

sign = data['col'].rolling('5d').apply(lambda x: np.sign(x[-1] - x[0]))

這個實現的問題是,對於長系列來說,它的速度非常慢。 您是否有使用內置的優化功能的解決方案?

如果您的“ col”值是統一采樣的,則可以應用類似於下面的內容。

col = pandas.Series([1,-1,0,3,5,21,7,4,67,4,3,6,8,5,4])
sign = np.sign(col.values[0:-5] - col.values[5:])

本質上,您獲取第一個N-window_len並減去最后一個N-window_len(這里我假設您每天都有一個數據點)。 向量運算比使用滾動運算要快得多

通過使用內存開銷rolling功能,您只會得到不同的第一個值和最后一個值,這將降低整個過程的速度,在這里我使用merge_asof

s=df[['COL']].shift(4,freq='D')
s=pd.merge_asof(df,s,left_index=True,right_index=True,tolerance=pd.Timedelta('5d'),direction='forward')
np.sign(s['COL_x']-s['COL_y'])

暫無
暫無

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

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