Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-数据帧中多列的滚动回归_Python_Pandas_Dataframe_Apply - Fatal编程技术网

Python Pandas-数据帧中多列的滚动回归

Python Pandas-数据帧中多列的滚动回归,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,我有一个大数据框,包含20年内10000列(股票)的每日价格时间序列(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

我有一个大数据框,包含20年内10000列(股票)的每日价格时间序列(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)

这是我的版本,使用df.rolling()并在列上迭代。 我不完全确定这是你想要的不要犹豫发表评论

将statsmodels.regression.linear_模型导入为sm
将statsmodels.tools.tools作为sm2导入
df_returns=pd.DataFrame({'0':[30,30,31,32,32],'1':[60,60,60,60,60],'2':[np.NaN,np.NaN,np.NaN,np.NaN,np.NaN]})
def回归(X,Z):
如果np.isnan(X).any()==False:
model=sm.OLS(X,Z).fit()
返回模型参数[1]
其他:
返回np.NaN
回归窗口=3
Z=np.arange(回归窗口)
Z=sm2。添加常数(Z,has_constant=“添加”)
df_coef=pd.DataFrame()
对于df_returns.cols中的列:
df_coef[col]=df_返回[col]。滚动(窗口=回归窗口)。应用(lambda列:回归(col,Z))
德福系数

这非常好用-谢谢!有任何关于如何进一步提高速度的建议吗?如果这个问题符合您的需要,请毫不犹豫地验证/投票。为了加快计算速度,您可以删除print()语句并删除行
Z=np.arange(len(X))
Z=sm2.add_constant(Z,has_constant=“add”)
,并将Z作为回归函数的参数传递,因为X的大小不会改变。您的编辑有助于将计算速度提高26%-太棒了!是否投票赞成/验证您的答案,不确定是否会显示,因为我没有15的stackoverflow声誉(刚刚开始)很高兴我提供了帮助,是的,答案已验证
TypeError: ("'float' object is not callable", 'occurred at index 31.12.2009')