df = pd.read_csv('tst.csv', header=[0, 1], index_col=0).sort_index(1)
time var1 var2 var3
loc1 loc2 loc1 loc2 loc1
1 11.0 14.0 12 13 15
2 21.0 NaN 22 23 25
3 NaN 34.0 32 33 35
然而,要进入三维阵列,我们必须将其投影到可用轴的笛卡尔乘积中。
cols = pd.MultiIndex.from_product(df.columns.levels)
d1 = df.reindex(columns=cols)
d1
var1 var2 var3
loc1 loc2 loc1 loc2 loc1 loc2
1 11.0 14.0 12 13 15 NaN
2 21.0 NaN 22 23 25 NaN
3 NaN 34.0 32 33 35 NaN
然后使用
numpy.reshape
numpy.transpose
d1.values.reshape(3, 3, 2).transpose(1, 0, 2)
array([[[ 11., 14.],
[ 21., NaN],
[ NaN, 34.]],
[[ 12., 13.],
[ 22., 23.],
[ 32., 33.]],
[[ 15., NaN],
[ 25., NaN],
[ 35., NaN]]])