1

假设您有一个包含 1000 个收盘价的数据框。您想以compute_var()滚动方式应用以最近 90 个收盘价命名的风险计算函数(比如 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_varself.closing[:i]在对最后 90 行执行计算之前裁剪关闭数据帧,然后通过.loc(i) = computer_var_value.

我怀疑有更好的方法。

4

1 回答 1

1

答案是由 EdChum + min_periods 调整下划线的 apply_rolling

问题来自NaN输入数据中的一些值,min_periods=None默认情况下,它的反应好像您的窗口中不允许有任何 NaN值(此处为 90 天)。对我来说似乎非常违反直觉,但设置min_periods=1解决了我的问题。

于 2015-06-16T14:19:54.573 回答