我想创建一个多级行索引,其中级别 0 是我命名为 environ 的列表中的列表元素的名称(参见下面的代码,例如政权 1)。此行索引的第二级是参数名称(例如 alpha[1] )。列索引是适合数据的模型类型的名称(例如,model_1)。最终目标是创建一个循环,在其中我可以传递与数据系列关联的名称列表,该系列的标签成为行多级索引的第一级,第二级是参数名称,列index 是适合数据系列的模型的名称。
进口:
from arch import arch_model
from collections import OrderedDict
import numpy as np
import pandas as pd
import datetime as dt
import arch.data.sp500
如果我打印了代码循环的结果,下面是我希望输出的样子。
model_1 model_2
Regime 1 alpha[1] 0.102150 0.099596
beta[1] 0.885206 0.899932
mu 0.056353 0.066129
nu NaN 6.607229
omega 0.017507 0.008664
model_1 model_2
Regime_2 alpha[1] 0.102150 0.099596
beta[1] 0.885206 0.899932
mu 0.056353 0.066129
nu NaN 6.607229
omega 0.017507 0.008664
下面的代码是我最近尝试获得上面所需的输出:
environ = ['regime1','regime2']
data = arch.data.sp500.load()
market = data['Adj Close']
returns = 100 * market.pct_change().dropna()
returns2 = 100 * market.pct_change().dropna()
datasets = [returns,returns2]
for i,j in zip(environ,datasets):
model1 = arch_model(datasets[j]).fit(disp='off')
model2 = arch_model(datasets[j], dist='t').fit(disp='off')
comparison = pd.DataFrame( OrderedDict((('model_1',model1.params), ('model_2', model2.params))))
print(comparison)
我收到的当前错误:
TypeError: list indices must be integers or slices, not Series
我不相信修复上面的错误会解决我的问题。我想返回一个多级数据框,看起来类似于上面所需的输出。