我的计算输出最好以Pandas MultiIndex格式存储。出于具体目的,让我们考虑下面的表格(虽然实际结构是以编程方式决定的)
X Y Z
DATE
2018-01-01 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
2018-01-02 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
我想将numpy数组输出分配给特定时间片。说我有
output = np.array([[1,2,3],[2,2,1],[4,2,3]])
所以期望的输出是
X Y Z
DATE
2018-01-01 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
2018-01-02 A 1 2 3
B 2 2 1
C 4 2 3
我尝试过pandas.IndexSlice,其中j是第j个时间片。
df.loc[pd.IndexSlice[j,:], :] = output
但这不起作用。我也试过用iloc替换loc但是无济于事。在非MultiIndex数据帧中,我可以将列表分配给DataFrame中的特定列,而无需单独分配每个元素。有没有办法将矩阵转换为MultiIndex数据帧?
答案 0 :(得分:0)
你的代码工作正常。
演示:
In [70]: df.loc[pd.IndexSlice['2018-01-02', :], :] = output
In [71]: df
Out[71]:
X Y Z
DATE I2
2018-01-01 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
2018-01-02 A 1.0 2.0 3.0
B 2.0 2.0 1.0
C 4.0 2.0 3.0
PS我测试了DATE
索引列为string
时的两个选项以及datetime
dtype时的两个选项 - 在这两种情况下上面的代码都正常工作。