在滚动窗口上的pandas数据框上应用自定义函数

时间:2015-06-12 15:29:11

标签: python pandas dataframe rolling-computation

假设您有一个包含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数据帧。

我怀疑有更好的方法。

1 个答案:

答案 0 :(得分:1)

回答是apply_rolling,由EdChum + min_periods调整

加下划线

问题来自输入数据中的一些NaN值,默认情况下为min_periods=None,这会在窗口中显示 no NaN值(这里90天)。 对我来说似乎非常违反直觉,但设置min_periods=1解决了我的问题。