簡體   English   中英

在滾動窗口上的pandas數據框上應用自定義功能

[英]apply custom function on pandas dataframe on a rolling window

假設您有一個包含1000個收盤價的數據框。 您要滾動應用最后90個收盤價上的名為compute_var()的風險計算函數(假設為VaR)。 你會怎么做? 我認為與apply()

def compute_var(df):
       return do_calculations_on(df[-90:])

def compute_rolling_var(self):
       self.var = self.closing.apply(compute_var)

問題是.apply只能關閉1天才能到達compute_var,而不是數據幀。 因此它給出了一個錯誤。

我找到的唯一可行的解​​決方案是使用迭代樣式算法(.iterrow()):我將迭代索引傳遞給compute_var並在對最后90行執行計算之前self.closing[:i]關閉的數據幀self.closing[:i] ,然后通過.loc(i) = computer_var_value填充df.var數據幀。

我懷疑有更好的方法。

答案是apply_rolling,由EdChum + min_periods調整強調

問題從幾個進來NaN輸入數據,和值min_periods=None默認情況下,它的反應就好像沒有 NaN值在窗口允許(在這里90天)。 對我來說似乎很違反直覺,但是設置min_periods=1解決了我的問題。

暫無
暫無

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

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