首页 > 解决方案 > 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)来计算CovVar以生成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(

标签: pythonpandasruntime-errortypeerror

解决方案


推荐阅读