在滚动 window 上对 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 并在执行计算之前裁剪结束数据帧 self.closing[:i]最后 90 行,然后它通过 .loc(i) = computer_var_value.

填充 df.var 数据框

我怀疑有更好的方法。

答案是 apply_rolling EdChum + min_periods 调整

下划线

问题来自输入数据中的几个 NaN 值,默认情况下 min_periods=None,其反应好像 没有 NaN 值在您的 window 中是允许的(此处为 90 天)。 对我来说似乎非常违反直觉,但设置 min_periods=1 解决了我的问题。