python - TypeError:“系列”对象是可变的
问题描述
我正在尝试为 756 天的股票创建 Beta,计算股票加权指数的协方差并除以指数的方差。
当我为具有单个股票的 DF 运行它时groupby
,它会运行并创建 Beta 列,但我需要为我的 DF 上的所有股票执行此操作,而 Groupby 是我在 Stack Overflow 上阅读的解决方案,但我还不能使用它。
这是导致错误的行
df2['Beta 756d'] = df2.groupby('CODNEG').apply(df2['Retorno_Ação'].rolling(window=756,center=False).cov(df2['Retorno_Ibov']) / df2['Retorno_Ibov'].rolling(window=756,center=False).var())
--
当代码到达上面的行时出现此错误
TypeError: 'Series' objects are mutable, thus they cannot be hashed
--
这是一个df2的例子
TIPREG DATE CODBDI CODNEG TPMERC NOMRES ESPECI PRAZOT MODREF PREABE PREMAX PREMIN PREMED PREULT PREOFC PREOFV TOTNEG QUATOT VOLTOT PREEXE INDOPC DATVEN FATCOT PTOEXE CODISI DISMES Retorno_Ação Retorno_Ibov
0 1 1995-01-02 2 ACE 3 10 ACESITA ON *INT R$ 6300 6300 6300 6300 6300 6300 6500 1 200000 1260000 0 0 99991231 1000 0 ACESACON 119 NaN NaN
105 1 1995-01-02 2 PET 3 10 PETROBRAS ON * R$ 6400 6400 6250 6287 6250 6250 6750 2 40000 251500 0 0 99991231 1000 0 PETRACON 132 NaN NaN
106 1 1995-01-02 2 PET 4 10 PETROBRAS PN * R$ 10700 11000 10400 10599 10500 10500 10650 234 31210000 330805170 0 0 99991231 1000 0 PETRACPN 133 NaN NaN
107 1 1995-01-02 2 BRD 4 10 PETROBRAS BR PN * R$ 4600 4600 4540 4591 4540 4333 4500 13 18200000 83566000 0 0 99991231 1000 0 BRDTACPN 102 NaN NaN
108 1 1995-01-02 2 PTN 4 10 PETTENATI PN * R$ 5189 5189 5189 5189 5189 4700 5280 1 5000000 25945000 0 0 99991231 1000 0 BRPTNTACNPR3 21 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1826575 1 2020-08-19 2 HGTX3 10 CIA HERING ON NM R$ 1576 1598 1547 1575 1575 1574 1575 14582 4640200 7309217700 0 0 99991231 1 0 BRHGTXACNOR9 151 0.005105 0.000788
1826576 1 2020-08-19 2 HOME34 10 HOME DEPOT DRN R$ 77798 78612 77798 78413 78612 55000 0 2 1720 134870760 0 0 99991231 1 0 BRHOMEBDR002 133 0.005719 0.000788
1826577 1 2020-08-19 2 HONB34 10 HONEYWELL DRN ED R$ 86347 86347 86347 86347 86347 0 0 1 100 8634700 0 0 99991231 1 0 BRHONBBDR006 127 0.085375 0.000788
1826579 1 2020-08-19 2 HYPE3 10 HYPERA ON NM R$ 3248 3265 3167 3199 3175 3175 3177 15332 3082700 9864018200 0 0 99991231 1 0 BRHYPEACNOR0 122 -0.034367 0.000788
1826517 1 2020-08-19 2 EMAE4 10 EMAE PN R$ 2869 2954 2831 2888 2952 2832 2953 10 1100 3177600 0 0 99991231 1 0 BREMAEACNPR1 114 0.040903 0.000788
我使用最后两列(Retorno_Ação、Retorno_Ibov)来计算Cov和Var以生成Beta。
谁能告诉我是什么导致了错误?
当 DF 只有一个库存时,此行工作正常:
df2['Beta 756d'] = df2['Retorno_Ação'].rolling(window=756,center=False).cov(df2['Retorno_Ibov']) / df2['Retorno_Ibov'].rolling(window=756,center=False).var()
--
当我使用时发生错误df2['Beta 756d'] = df2.groupby('CODNEG').apply(
解决方案
推荐阅读
- ruby-on-rails - 如何在弹性 beantalk 应用程序中访问不同环境(暂存、生产)的 aws 系统管理器参数存储
- python - 如果在 for 循环声明中甚至没有将 b 定义为占位符,为什么我的 for 循环在每次迭代时打印 2 ?
- python - 如何在数据框中分配列名。如果该列已经有值
- python - 如何用列名替换类别的fillna?
- flutter - 在 VSCode 终端中更新 UTF
- ios - 系统跟踪仪器中的时间线是什么意思
- c# - Unity 项目升级:将项目从 Unity4 升级到 Unity5 构建时出现 Getcomponent 问题
- javascript - React.createElement("audio", ... 不工作?怎么了?
- android - Android中的弹跳球跳过速度
- google-analytics - 如何将 Google Analytics 片段插入我的 Mediawiki wiki 页面?