首页 > 解决方案 > 在熊猫数据框中按组滚动回归

问题描述

我有一个熊猫数据框,其中包含 1963 年至 2012 年期间个别公司的每日股票收益(近 6000 万行)。我想估计 CAPM 贝塔值,因此我需要在过去 250 天内为每家公司运行滚动 OLS 回归,并将贝塔值添加到现有数据框中。

我已经尝试将 pyfinance 包中的 PandasRollingOLS 函数与 'groupby' 结合起来,它只返回了一个内存错误。我还尝试编写两个 for 循环,第一个按公司分组('PERMNO'),第二个 for 循环进行滚动回归。但是,这也不起作用

我的数据框如下所示:

           PERMNO       RET       mkt       RF
date                                          
1986-01-08  10000 -0.024640 -0.020994  0.00025
1986-01-09  10000 -0.000250 -0.011469  0.00025
1986-01-10  10000 -0.000250 -0.000167  0.00025
1986-01-13  10000  0.049750  0.002499  0.00025
1986-01-14  10000  0.047369  0.000116  0.00025
1986-01-15  10000  0.045205  0.007956  0.00025
1986-01-16  10000  0.043228  0.004452  0.00025
1986-01-17  10000 -0.000250 -0.001991  0.00025
1986-01-20  10000 -0.000250 -0.003985  0.00025
1986-01-21  10000 -0.000250 -0.007242  0.00025

rolling = daily.groupby('PERMNO').apply(lambda x: ols.PandasRollingOLS(y=daily['RET'], x=daily['mkt'], window=250))
regression=np.zeros((len(daily.index),2))

for group_name, df_group in daily_grouped:
    for row in range(0,len(daily.index),1):
        y= daily.RET[row:row + 250]
        x= daily.mkt[row:row + 250]
        regression[row]=np.polyfit(x,y,1)

daily['beta']=regression[:,0]

我想知道如何从公司的滚动回归中获取 beta 值

标签: pythonpandas

解决方案


推荐阅读