滚动窗口并应用:如何使用窗口中的两列

问题描述

我有一个数据框,我想使用滚动提取两列并对它们执行回归(对第二列进行回归)。我已经看到人们使用apply来执行一个功能,例如:

def multi_period_return(period_returns):
   return np.prod(period_returns + 1) - 1

pr = data.SP500.pct_change() # period return
r = pr.rolling('360D').apply(multi_period_return)

我的数据是:

sp500data:
caldt,spreturn,shifted
1962-07-05,0.0056,0.0112
1962-07-06,-0.0112,0.0056
1962-07-09,0.0067,-0.0112
1962-07-10,0.011,0.0067

考虑到上面的代码效果很好,我正在写:

def firstcoef(spdf):
    return sm.OLS(spdf['spreturn'],spdf['shifted']).fit().params[0]

r = sp500data.rolling(window='360D').apply(firstcoef)

但是代码无法正常工作,并且出现以下错误

Traceback (most recent call last):
  File "C:/Users/moham/PycharmProjects/pythonProject1/main.py",line 19,in <module>
    r = sp500data.rolling(window='360D').apply(firstcoef)
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\window\rolling.py",line 2059,in apply
    return super().apply(
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\window\rolling.py",line 1388,in apply
    return self._apply(
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\window\rolling.py",line 586,in _apply
    result = np.apply_along_axis(calc,self.axis,values)
  File "<__array_function__ internals>",line 5,in apply_along_axis
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\numpy\lib\shape_base.py",line 379,in apply_along_axis
    res = asanyarray(func1d(inarr_view[ind0],*args,**kwargs))
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\window\rolling.py",line 576,in calc
    return func(x,start,end,min_periods)
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\window\rolling.py",line 1415,in apply_func
    return window_func(values,begin,min_periods)
  File "pandas\_libs\window\aggregations.pyx",line 1441,in pandas._libs.window.aggregations.roll_generic_variable
  File "C:/Users/moham/PycharmProjects/pythonProject1/main.py",line 10,in firstcoef
    return sm.OLS(spdf['spreturn'],spdf['shifted']).fit().params[0]
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\series.py",line 882,in __getitem__
    return self._get_value(key)
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\series.py",line 991,in _get_value
    loc = self.index.get_loc(label)
  File "C:\Users\moham\PycharmProjects\pythonProject1\venv\lib\site-packages\pandas\core\indexes\datetimes.py",line 605,in get_loc
    raise KeyError(key) from err
KeyError: 'spreturn'

Process finished with exit code 1

我想提取回归的第一个系数并将其作为数据框,然后绘制它们。修改我的代码的正确方法是什么?

我想要的输出是这样的:

1962-07-05,0.09
1962-07-06,0.011
1962-07-09,0.02
1962-07-10,0.03
1962-07-11,0.04

值是模型参数(实际上,我希望第一个模型参数为params[0])。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)