codingknob codingknob - 4 months ago 31
Python Question

drop elements of a level of a multi-level index pandas

In the following DataFrame there are a 2-level MultiIndex, namely

city
and
date
:

temp
count
city date
SFO 2014-05-31 31
2014-06-30 30
2014-07-31 31
2014-08-31 31
2014-09-30 30
YYZ 2014-05-31 31
2014-06-30 30
2014-07-31 31
2014-08-31 31
2014-09-30 30


I want to drop
2014-05-31
and
2014-09-30
from the date level.

How do I do this?

Comment: To build the DataFrame -

df = pd.DataFrame(
{('temp', 'count'): {('SFO', Timestamp('2014-05-31 00:00:00')): 31,
('SFO', Timestamp('2014-06-30 00:00:00')): 30,
('SFO', Timestamp('2014-07-31 00:00:00')): 31,
('SFO', Timestamp('2014-08-31 00:00:00')): 31,
('SFO', Timestamp('2014-09-30 00:00:00')): 30,
('YYZ', Timestamp('2014-05-31 00:00:00')): 31,
('YYZ', Timestamp('2014-06-30 00:00:00')): 30,
('YYZ', Timestamp('2014-07-31 00:00:00')): 31,
('YYZ', Timestamp('2014-08-31 00:00:00')): 31,
('YYZ', Timestamp('2014-09-30 00:00:00')): 30}}
).rename_axis(['city','date'])

Answer

You can give drop a specific level:

In[4]: df.drop([Timestamp('2014-05-31'),Timestamp('2014-09-30')],level=1)
Out[4]: 
                 temp
                count
city date            
SFO  2014-06-30    30
     2014-07-31    31
     2014-08-31    31
YYZ  2014-06-30    30
     2014-07-31    31
     2014-08-31    31
Comments