我有一个具有2个索引级别的 Dataframe :
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
我想把它变成这样:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
我如何才能最好地做到这一点?
我之所以需要这样做,是因为我想聚合数据as instructed here,但是如果我的列用作索引,我就不能这样选择它们。
7条答案
按热度按时间sxpgvts31#
您只需在DataFrame的名称之后调用
.reset_index()
:xmjla07d2#
这并不适用于你的情况,但对其他人(比如5分钟前的我)来说可能会有帮助。如果一个人的multindex具有相同的名称,如:
df.reset_index(inplace=True)
将失败,因为创建的列不能具有相同的名称。因此,您需要将multindex重命名为
df.index = df.index.set_names(['Trial', 'measurement'])
,以获得:然后
df.reset_index(inplace=True)
就会像一个魅力一样工作。我在一个名为
live_date
的日期时间列(不是索引)上按年和月分组后遇到了这个问题,这意味着年和月都被命名为live_date
。vxqlmq5t3#
在某些情况下,
df.reset_index()
可能无法使用(例如,当您也需要索引时)。在这种情况下,请使用index.get_level_values()
直接访问索引值:这会将索引值指派给个别数据行并保留索引。
有关详细信息,请参阅docs。
smtd7mpg4#
正如@cs95在注解中提到的,要只删除一个级别,请用途:
df.reset_index(level=[...])
这样可以避免在重置后重新定义所需的索引。
e5nqia275#
我也遇到了Karl的问题,我只是发现自己重命名了聚合列,然后重新设置了索引。
fjaof16o6#
简短而简单
y4ekin9u7#
类似于Alex solution,但形式更为一般化。它保持索引不变,并将索引级别作为新列添加到其名称中。
其给出了