如何从多索引数据框中删除级别?

Yar*_*riv 52 multi-index dataframe pandas

例如,我有:

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
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法从索引中删除最后一个级别:

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

Yar*_*riv 72

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

  • 值得注意的是,有一个inplace参数,即`True`会修改`df`而不是返回一个新的DataFrame. (11认同)

And*_*den 56

您不需要创建新的DataFrame实例!您可以修改索引:

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

     A
1 1  8
  3  9
Run Code Online (Sandbox Code Playgroud)

您还可以指定负指数,以便从末尾进行选择:

df.index = df.index.droplevel(-1)
Run Code Online (Sandbox Code Playgroud)


SHA*_*HAR 7

如果您的索引名称如下

       A
X Y Z
1 1 1  8
  3 2  9
Run Code Online (Sandbox Code Playgroud)

然后,您还可以通过指定索引名称来删除

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