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

Python 滚动窗口和应用:如何使用窗口中的两列,python,pandas,regression,apply,rolling-computation,Python,Pandas,Regression,Apply,Rolling Computation,我有一个dataframe,我想使用rolling来提取两列并对其执行回归(在第二列上回归第一列)。我看到人们使用apply对数据执行one功能,例如: 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_re

我有一个dataframe,我想使用rolling来提取两列并对其执行回归(在第二列上回归第一列)。我看到人们使用
apply
对数据执行one功能,例如:

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, end, 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


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

“代码不起作用”-请包含完整的错误消息。@DYZ done。我将错误放在那里。
KeyError:'spreturn'
。您的示例不包含此列或对此列的引用。追踪您引用该列的位置,您会发现您的错误是
'column1'
,@palhright,但错误是
spreturn
。因此,运行该示例,直到您得到相同的错误并发布回溯。
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