📜  在 Pandas 中从多索引恢复到单索引数据帧(1)

📅  最后修改于: 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

我们可以看到,该数据帧有两个级别的行索引,分别是 firstsecond

恢复为单级索引数据帧

要将多级索引数据帧恢复为单级索引数据帧,我们可以使用 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() 方法将 firstsecond 两个级别的索引转换为了列名,并添加了默认的整数索引。

如果我们只想移除部分级别的索引,可以使用 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 中从多级索引数据帧恢复为单级索引数据帧。这种转换在某些情况下非常有用,可以让我们更方便地进行数据操作和分析。