How to simply add a column level to a pandas dataframe

前端 未结 4 1216
春和景丽
春和景丽 2020-12-08 13:08

let say I have a dataframe that looks like this:

df = pd.DataFrame(index=list(\'abcde\'), data={\'A\': range(5), \'B\': range(5)})
 df
Out[92]: 
   A  B
a  0         


        
相关标签:
4条回答
  • 2020-12-08 13:29

    option 1
    set_index and T

    df.T.set_index(np.repeat('C', df.shape[1]), append=True).T
    

    option 2
    pd.concat, keys, and swaplevel

    pd.concat([df], axis=1, keys=['C']).swaplevel(0, 1, 1)
    

    0 讨论(0)
  • Another way for MultiIndex (appanding 'E'):

    df.columns = pd.MultiIndex.from_tuples(map(lambda x: (x[0], 'E', x[1]), df.columns))
    
       A  B
       E  E
       C  D
    a  0  0
    b  1  1
    c  2  2
    d  3  3
    e  4  4
    
    0 讨论(0)
  • 2020-12-08 13:41

    A solution which adds a name to the new level and is easier on the eyes than other answers already presented:

    df['newlevel'] = 'C'
    df = df.set_index('newlevel', append=True).unstack('newlevel')
    
    print(df)
    #           A  B
    # newlevel  C  C
    # a         0  0
    # b         1  1
    # c         2  2
    # d         3  3
    # e         4  4
    
    0 讨论(0)
  • 2020-12-08 13:51

    As suggested by @StevenG himself, a better answer:

    df.columns = pd.MultiIndex.from_product([df.columns, ['C']])
    
    print(df)
    #    A  B
    #    C  C
    # a  0  0
    # b  1  1
    # c  2  2
    # d  3  3
    # e  4  4
    
    0 讨论(0)
提交回复
热议问题