Pandas 2 级多索引

问题描述 投票:0回答:1

我有一个格式如下的json:

data = {
    'Low': {
        '2023.07.01': {"u": "mo", 'N': 1, 'O': 2, "PN": 22, "PO": 34},
        '2023.07.02': {"u": "no", 'N': 1, 'O': 2, "PN": 22, "PO": 34}
    },
    'Medium': {
        '2023.07.01': {"u": "no", 'N': 1, 'O': 2, "PN": 22, "PO": 34},
        '2023.07.02': {"u": "mo", 'N': 1, 'O': 2, "PN": 22, "PO": 34}
    },
    'High': {
        '2023.07.01': {"u": "no", 'N': 122, 'O': 2, "PN": 212, "PO": 334},
        '2023.07.02': {"u": "mo", 'N': 13, 'O': 2, "PN": 2, "PO": 342}
    }
}

我如何创建具有以下结构的多级数据框:

Date    U   Low              Medium            High         
            N   PN  O   PN   N  PN  O   PN     N    PN  O   PN

我尝试了各种方法,例如

df.stack
df.pivot
,但我无法获得我需要的确切格式。如有任何帮助,我们将不胜感激。

附上 Excel 图片以便更清晰。
谢谢

python pandas multi-index
1个回答
1
投票

你可以这样做:

(df.stack().apply(pd.Series)
   .set_index('u',append=True)
   .stack().unstack(level=(1,-1))
)

输出:

               Low                  Medium                  High                       Low
                 N    O    PN    PO      O    PN    PO  New    O     PN     PO    New  New
           u                                                                              
2023.07.01 mo  1.0  2.0  22.0  34.0    NaN   NaN   NaN  NaN  NaN    NaN    NaN    NaN  NaN
           no  NaN  NaN   NaN   NaN    2.0  22.0  34.0  1.0  2.0  212.0  334.0  122.0  NaN
2023.07.02 mo  NaN  NaN   NaN   NaN    2.0  22.0  34.0  1.0  2.0    2.0  342.0   13.0  NaN
           no  NaN  2.0  22.0  34.0    NaN   NaN   NaN  NaN  NaN    NaN    NaN    NaN  1.0
© www.soinside.com 2019 - 2024. All rights reserved.