我有2列收益为dataframe的列(一列是随着时间的推移比特币的回报,一列是一种加密资产的回报)。我想计算它们之间的滚动cov,然后计算方差,然后计算滚动beta系数。 到最后,测试版应该看起来像beta,而我想制作这样的图表rolling beta
cov = df[['Return Market','Return Asset']].rolling(window=3).cov()
cov
var = pd.rolling_var(df['Return Market'], window=3)
var
df['Beta'] = cov / var
当我跑步时
cov = df[['Return Market','Return Asset']].rolling(window=3).cov()
我正在得到这个 output,这使我无法完成其余代码。我不需要完整的协方差矩阵,我只需要'Return Market'和'Return Asset'之间的cov。我想把剩下的丢掉。问题是每个索引都有2行。如何解决?
此错误:TypeError: incompatible index of inserted column with frame index
必须是错误的cov输出引起的
请帮我弄清楚。我使用Python 3.7,pandas版本是0.22.0
答案 0 :(得分:0)
首先,您仍然(类似于上一个问题)使用版本0.17中的pandas函数,并且已安装0.22。版本0.18删除了所有rolling_ *函数。请确保您已阅读有关熊猫版本的文档。版本显示在文档“ pandas 0.23.3文档»API参考»”的左上方。这是您需要在熊猫0.22版中使用的功能:https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.core.window.Rolling.var.html#pandas.core.window.Rolling.var
为了获取协方差值(而不是完整的协方差矩阵),您需要将第二列作为滚动参数传递:
cov = df[['Return Market']].rolling(window=3).cov(other=df['Return Asset'].rolling(window=3))
var = df['Return Market'].rolling(window=3).var()
beta = (cov['Return Market'] / var).dropna()