Search code examples
pandasmulti-level

I have dateframe which is multilevel how do I set date in second level as common index


I currently have a dataframe which is multi level with first level of header being company name and the second level being the date, size and pice for that respective company. I want to set the index as date so in the second level there is no longer date.


Solution

  • I think you need set_index by tuples, for rename index names use rename_axis:

    print (df)
            name                
            date    size   price
    0 2014-01-08  0.7990  422.65
    1 2014-01-09  0.8095  421.26
    2 2014-01-10  0.8135  423.35
    3 2014-01-13  0.8065  417.78
    
    df = df.set_index(('name','date')).rename_axis(None)
    print (df)
                  name        
                  size   price
    2014-01-08  0.7990  422.65
    2014-01-09  0.8095  421.26
    2014-01-10  0.8135  423.35
    2014-01-13  0.8065  417.78
    

    EDIT by comment:

    print (df.set_index([('name','date'), ('name','size')]))
                                 name
                                price
    (name, date) (name, size)        
    2014-01-08   0.7990        422.65
    2014-01-09   0.8095        421.26
    2014-01-10   0.8135        423.35
    2014-01-13   0.8065        417.78
    
    df = df.set_index([('name','date'), ('name','size')]).rename_axis(('date', 'size')) 
    print (df)
                         name
                        price
    date       size          
    2014-01-08 0.7990  422.65
    2014-01-09 0.8095  421.26
    2014-01-10 0.8135  423.35
    2014-01-13 0.8065  417.78