How to remove levels from a multi-indexed dataframe?

Yariv picture Yariv · Jun 13, 2013 · Viewed 66.1k times · Source

For example, I have:

In [1]: df = pd.DataFrame([8, 9],
                          index=pd.MultiIndex.from_tuples([(1, 1, 1),
                                                           (1, 3, 2)]),
                          columns=['A'])

In [2] df
Out[2]: 
       A
1 1 1  8
  3 2  9

Is there a better way to remove the last level from the index than this:

In [3]: pd.DataFrame(df.values,
                     index=df.index.droplevel(2),
                     columns=df.columns)
Out[3]: 
     A
1 1  8
  3  9

Answer

Yariv picture Yariv · Jun 13, 2013
df.reset_index(level=2, drop=True)
Out[29]: 
     A
1 1  8
  3  9