例如,我有:
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
有没有比这更好的方法从指数中删除最后一个级别:
In [3]: pd.DataFrame(df.values,
index=df.index.droplevel(2),
columns=df.columns)
Out[3]:
A
1 1 8
3 9
4条答案
按热度按时间rlcwz9us1#
5fjcxozz2#
您不需要创建新的DataFrame示例!您可以修改索引:
您还可以指定负索引,以便从末尾进行选择:
mftmpeh83#
如果索引的名称类似
然后,还可以通过指定索引名称来移除
2eafrhcq4#
从0.24+开始,我们可以直接在
df
上使用droplevel
。因此,要删除索引的最后一级:也可以用参数
axis
控制要删除级别的轴,默认为0,即在索引之上,通过提供列表可以一次删除多个级别,如果索引有名称,也可以使用(如链接文档中所示)。注意:
droplevel
的参数试图首先解释为 * 标签 *;因此,如果任何级别碰巧具有整数名称,则它将被丢弃,即,不按位置丢弃:为了确保位置删除发生,我们可以访问
names
属性并在那里选择positionally:最后,
droplevel
返回一个新的 Dataframe ,因此需要使用df = df.droplevel(...)
才能看到df
中的更改。