[英]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.