首页 > 解决方案 > 将二维值数组分配给 Pandas 多索引数据框

问题描述

我有最好以 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 数据帧?

标签: pythonpandasmulti-index

解决方案


你的代码工作得很好。

演示:

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和当它是datetimedtype时测试了这两个选项 - 在这两种情况下,上面的代码都可以正常工作。


推荐阅读