У меня есть большой фрейм данных, содержащий дневные временные ряды цен для 10 000 столбцов (акций) за период в 20 лет (5000 строк x 10000 столбцов). Отсутствующие наблюдения обозначаются NaN.
0 1 2 3 4 5 6 7 8 \
31.12.2009 30.75 66.99 NaN NaN NaN NaN 393.87 57.04 NaN
01.01.2010 30.75 66.99 NaN NaN NaN NaN 393.87 57.04 NaN
04.01.2010 31.85 66.99 NaN NaN NaN NaN 404.93 57.04 NaN
05.01.2010 33.26 66.99 NaN NaN NaN NaN 400.00 58.75 NaN
06.01.2010 33.26 66.99 NaN NaN NaN NaN 400.00 58.75 NaN
Теперь я хочу запустить скользящую регрессию для окна 250 дней для каждого столбца за весь период выборки и сохранить коэффициент в другом кадре данных
Перебор столбцов и строк с использованием двух циклов for не очень эффективен, поэтому я попробовал это сделать, но получил следующее сообщение об ошибке
def regress(start, end):
y = df_returns.iloc[start:end].values
if np.isnan(y).any() == False:
X = np.arange(len(y))
X = sm.add_constant(X, has_constant="add")
model = sm.OLS(y,X).fit()
return model.params[1]
else:
return np.nan
regression_window = 250
for t in (regression_window, len(df_returns.index)):
df_coef[t] = df_returns.apply(regress(t-regression_window, t), axis=1)
TypeError: ("'float' object is not callable", 'occurred at index 31.12.2009')