Search code examples
pythonpandasmulti-index

Import from a dictionary as a multi-index pd.DataFrame


I have a dictionary, which calls for multi-indexing like the following:

dict = {'Main1' : {'A1' : {'a1' : 0}, 
                   'A2' : {'a2' : 15}, 
                   'A3' : {'a3' : 22}, 
                   'A4' : {'a4' : 130}},
        'Main2' : {'B1' : {'b1' : 150},
                   'B2' : {'b2' : 30},
                   'B3' : {'b3' : 1}}}

And I would like to have it imported on Python as a pandas DataFrame like this :

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

Is that even possible or should I try to find another way to import my data ?


Solution

  • You can do it so:

    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']
    

    Output:

       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