How to remove levels from a multi-indexed dataframe?

拟墨画扇 提交于 2019-11-26 19:05:39

问题


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

回答1:


df.reset_index(level=2, drop=True)
Out[29]: 
     A
1 1  8
  3  9



回答2:


You don't need to create a new DataFrame instance! You can modify the index:

df.index = df.index.droplevel(2)
df

     A
1 1  8
  3  9

You can also specify negative indices, for selection from the end:

df.index = df.index.droplevel(-1)



回答3:


If your index has names like

       A
X Y Z
1 1 1  8
  3 2  9

Then you can also remove by specifying the index name

df.index = df.index.droplevel(Z)



来源:https://stackoverflow.com/questions/17084579/how-to-remove-levels-from-a-multi-indexed-dataframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!