我有这个result
,它是ndarray的列表。我正在尝试在循环中创建3d熊猫数据框,如下所示:
col_names = list()
col_names += [('var%d(t)' % (j + 1)) for j in range(138)]
for b in range(0, B):
result = get_new_results()
df1 = pd.DataFrame(data=result, columns=col_names)
df = pd.concat([df, df1], axis=0)
但是这会将每个结果添加为df
末尾的新行。因此,如果每个result
是形状为(138,)的112个ndarray,类似于尺寸为112x138的表,则df
的4次迭代后,我的b
将具有shape =(448,138) (448 = 112 * 4)。行索引将从0变为111,然后再次从0变为112。df.ndim
等于2。但是我需要创建一个3d数据帧,如下所示:
0 var1(t) -0.863838, ... # 112 different values for var1(t)
var2(t) 0.299368, ... # 112 different values for var2(t)
... ...
var137(t) 0.299368, ... # 112 different values for var137(t)
1 var1(t) 0.206053, ... # 112 different values for var1(t)
var2(t) 1.063327, ... # 112 different values for var2(t)
... ...
var137(t) 0.299368, ... # 112 different values for var137(t)
2 var1(t) -2.213588, ... # 112 different values for var1(t)
var2(t) -0.251905, ... # 112 different values for var2(t)
... ...
var137(t) 0.299368, ... # 112 different values for var137(t)
...
B var1(t) 0.408204, ... # 112 different values for var1(t)
var2(t) 1.266143, ... # 112 different values for var2(t)
... ...
var137(t) 0.299368, ... # 112 different values for var137(t)
我相信我可以使用pd.MultiIndex
来创建它,但是我无法提出一个合理的解决方案。有人可以帮我解决吗?
答案 0 :(得分:0)
这是我设法创建数据框的方法:
frames = []
col_names = list()
col_names += [('var%d(t)' % (j+1)) for j in range(138)]
for i in range(0, B):
result = get_new_results()
df_tmp = pd.DataFrame(data=results, columns=col_names)
frames.append(df_tmp)
df = pd.concat(frames, axis=0, keys=range(0, 112))