How to do Multi-Column from_tuples?

后端 未结 2 720
抹茶落季
抹茶落季 2021-01-02 01:41

I get how to use pd.MultiIndex.from_tuples() in order to change something like

       Value
(A,a)  1
(B,a)  2
(B,b)  3

into

相关标签:
2条回答
  • 2021-01-02 02:07

    Another solution is use MultiIndex.from_tuples with parameter names:

    import pandas as pd
    
    df = pd.DataFrame({'Value': [1,2,3]}, index=[('A','a'),('B','a'),('B','b')])
    print (df)
            Value
    (A, a)      1
    (B, a)      2
    (B, b)      3
    
    df.index = pd.MultiIndex.from_tuples(df.index, names=['Caps','Lower'])
    print (df)
                Value
    Caps Lower       
    A    a          1
    B    a          2
         b          3
    

    This same works with columns, see Edchum's answer:

    df.columns= pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower'])
    
    0 讨论(0)
  • 2021-01-02 02:28

    Assign direct to columns with the result from pd.MultiIndex.from_tuples passing in your existing columns:

    In [186]:
    l=[('A', 'a'),  ('A', 'b'), ('B','a'),  ('B','b')]
    df = pd.DataFrame(np.random.randn(5,4), columns = l)
    df
    
    Out[186]:
         (A, a)    (A, b)    (B, a)    (B, b)
    0 -0.876353  0.553742  1.631858 -0.561309
    1  0.463058 -0.455014 -0.491336 -1.436059
    2  0.337810  0.233624 -0.571749 -2.259763
    3  1.073057 -0.475894  0.999643 -0.379743
    4  0.441800  0.311202 -0.191552  0.291268
    
    In [187]:    
    df.columns = pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower'])
    df
    
    Out[187]:
    Caps          A                   B          
    Lower         a         b         a         b
    0     -0.876353  0.553742  1.631858 -0.561309
    1      0.463058 -0.455014 -0.491336 -1.436059
    2      0.337810  0.233624 -0.571749 -2.259763
    3      1.073057 -0.475894  0.999643 -0.379743
    4      0.441800  0.311202 -0.191552  0.291268
    

    note that you can assign directly to names attribute of the columns attribute like the following:

    df.columns.names = ['Caps','Lower']
    

    not to be confused with the name attribute

    0 讨论(0)
提交回复
热议问题