📅  最后修改于: 2023-12-03 15:07:45.265000             🧑  作者: Mango
在 Pandas 中,多个级别的索引可以用来表示数据的多个维度,但是在某些情况下,我们可能需要将多级索引转换为单级索引。本文将介绍如何在 Pandas 中从多级索引恢复为单级索引的数据帧。
首先,我们来创建一个多级索引数据帧:
import pandas as pd
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=('first', 'second'))
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8], 'B': [10, 20, 30, 40, 50, 60, 70, 80]}, index=index)
print(df)
输出结果为:
A B
first second
bar one 1 10
two 2 20
baz one 3 30
two 4 40
foo one 5 50
two 6 60
qux one 7 70
two 8 80
我们可以看到,该数据帧有两个级别的行索引,分别是 first
和 second
。
要将多级索引数据帧恢复为单级索引数据帧,我们可以使用 reset_index()
方法,该方法会将所有级别的索引转换为列名,然后添加一个默认的整数索引。例如:
df_reset = df.reset_index()
print(df_reset)
输出结果为:
first second A B
0 bar one 1 10
1 bar two 2 20
2 baz one 3 30
3 baz two 4 40
4 foo one 5 50
5 foo two 6 60
6 qux one 7 70
7 qux two 8 80
可以看到,reset_index()
方法将 first
和 second
两个级别的索引转换为了列名,并添加了默认的整数索引。
如果我们只想移除部分级别的索引,可以使用 droplevel()
方法。例如,如果我们想移除 second
索引级别,可以这样做:
df_dropped = df_reset.droplevel(level=1, axis=1)
print(df_dropped)
输出结果为:
first A B
0 bar 1 10
1 bar 2 20
2 baz 3 30
3 baz 4 40
4 foo 5 50
5 foo 6 60
6 qux 7 70
7 qux 8 80
在本例中,我们使用 droplevel()
方法移除了 second
索引级别,并使用 axis=1
参数指定移除列索引。移除行索引的方式与之类似,只需要将 axis=1
改为 axis=0
即可。
通过本文的介绍,我们可以学会如何在 Pandas 中从多级索引数据帧恢复为单级索引数据帧。这种转换在某些情况下非常有用,可以让我们更方便地进行数据操作和分析。