Python 作为多索引pd.DataFrame从字典导入

Python 作为多索引pd.DataFrame从字典导入,python,pandas,multi-index,Python,Pandas,Multi Index,我有一本字典,它要求多索引,如下所示: dict = {'Main1' : {'A1' : {'a1' : 0}, 'A2' : {'a2' : 15}, 'A3' : {'a3' : 22}, 'A4' : {'a4' : 130}}, 'Main2' : {'B1' : {'b1' : 150}, 'B2' : {'b2

我有一本字典,它要求多索引,如下所示:

dict = {'Main1' : {'A1' : {'a1' : 0}, 
                   'A2' : {'a2' : 15}, 
                   'A3' : {'a3' : 22}, 
                   'A4' : {'a4' : 130}},
        'Main2' : {'B1' : {'b1' : 150},
                   'B2' : {'b2' : 30},
                   'B3' : {'b3' : 1}}}
我希望在Python上将其作为数据帧导入,如下所示:

col1     col2   col3   col4
Main 1   A1     a1     0
Main 1   A2     a2     15
Main 1   A3     a3     22
Main 1   A4     a4     130
Main 2   B1     b1     150
Main 2   B2     b2     30
Main 2   B3     b3     1
这是可能的还是我应该尝试另一种方法来导入数据?

您可以这样做:

df = pd.DataFrame([(k1, k2, k3, v) for k1, k23v in dict.items()
                       for k2, k3v in k23v.items()
                       for k3, v in k3v.items()
                       ])
df.columns = ['Col1', 'Col2', 'Col3', 'Col4']
输出:

   Col1 Col2 Col3  Col4
0  Main1  A1  a1    0
1  Main1  A3  a3   22
2  Main1  A2  a2   15
3  Main1  A4  a4  130
4  Main2  B1  b1  150
5  Main2  B2  b2   30
6  Main2  B3  b3    1
Main1  A1  a1      0.0
       A2  a2     15.0
       A3  a3     22.0
       A4  a4    130.0
Main2  B1  b1    150.0
       B2  b2     30.0
       B3  b3      1.0
dtype: float64
这是一种使用:


我发现的另一种方法是记录数据帧,
concat
将它们全部放在一起,然后
unstack
,然后删除
NaN

dataframes = {k: pd.DataFrame(v) for k,v in d.items()}
dataframe = pd.concat(dataframes, axis=1)
output = dataframe.unstack().dropna()
输出:

   Col1 Col2 Col3  Col4
0  Main1  A1  a1    0
1  Main1  A3  a3   22
2  Main1  A2  a2   15
3  Main1  A4  a4  130
4  Main2  B1  b1  150
5  Main2  B2  b2   30
6  Main2  B3  b3    1
Main1  A1  a1      0.0
       A2  a2     15.0
       A3  a3     22.0
       A4  a4    130.0
Main2  B1  b1    150.0
       B2  b2     30.0
       B3  b3      1.0
dtype: float64