python - 在熊猫数据框中按组滚动回归
问题描述
我有一个熊猫数据框,其中包含 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 值
解决方案
推荐阅读
- javascript - 将字符串连接到常量变量名并从范围访问整个新变量
- html - 在移动设备上打开导航栏时如何隐藏或移动背景?
- nativescript - Nativescript 本地 css 文件
- angular - (角度单元测试)未捕获的错误:未捕获(承诺):错误:无法匹配任何路由。URL Segment: 'B1' , (毕竟抛出了一个错误)
- swift - 如何使用谷歌标签管理器 v5 快速编码,尤其是增强电子商务部分?
- javascript - 垂直对齐表格中的按钮,上面有不同的文本大小(使用引导网格)
- c++ - QMediaPlayer 在睡眠前不播放
- c++ - 为什么标准不将模板构造函数视为复制构造函数?
- amazon-web-services - 允许对单个存储桶进行读写访问的 Amazon S3 策略
- jquery - 使用 jQuery 动态更新 DOM,使用 .blur 和 .click 切换元素