2

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.

1 Answers1

1

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
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252