📜  如何在 Pandas 中展平 MultiIndex?(1)

📅  最后修改于: 2023-12-03 15:24:18.512000             🧑  作者: Mango

如何在 Pandas 中展平 MultiIndex?

在 Pandas 中,MultiIndex 可以让我们方便地对数据进行分层索引,但有时候我们需要把 MultiIndex 展平,使得数据更加易于理解和操作。下面将介绍如何在 Pandas 中展平 MultiIndex。

方法一:使用 reset_index()

reset_index() 方法可以把 MultiIndex 转化为普通的单层 index。例如,我们有一个 MultiIndex DataFrame 如下:

import pandas as pd

index = pd.MultiIndex.from_tuples([(0, 'A'), (0, 'B'), (1, 'A'), (1, 'B')])
data = pd.DataFrame({'value': [1, 2, 3, 4]}, index=index)

输出:

     value
0 A      1
  B      2
1 A      3
  B      4

我们可以使用 reset_index() 方法把 MultiIndex 转化为普通的单层 index:

data.reset_index(inplace=True)

输出:

   level_0 level_1  value
0        0       A      1
1        0       B      2
2        1       A      3
3        1       B      4

此时,原来的 MultiIndex 已经被转换为了两列单层 index。我们可以根据需要进行列名的修改和删除等操作。

方法二:使用 stack() 和 unstack()

另一种展平 MultiIndex 的方法是使用 stack() 和 unstack() 方法。具体来说,stack() 方法可以把 DataFrame 中的列转化为一层 MultiIndex,而 unstack() 方法则可以把 MultiIndex 转化为列。例如,我们有一个 MultiIndex DataFrame 如下:

import pandas as pd

index = pd.MultiIndex.from_tuples([(0, 'A'), (0, 'B'), (1, 'A'), (1, 'B')])
data = pd.DataFrame({'value': [1, 2, 3, 4]}, index=index)

输出:

     value
0 A      1
  B      2
1 A      3
  B      4

我们可以使用 stack() 方法把列转化为一层 MultiIndex:

data_stacked = data.stack()

输出:

0  A    1
   B    2
1  A    3
   B    4
dtype: int64

此时,MultiIndex 被转化为一层,数据也变成了 Series。

我们还可以使用 unstack() 方法把 MultiIndex 转化为列。例如,我们把上一步得到的 Series 转化为 DataFrame:

data_unstacked = data_stacked.unstack()

输出:

   A  B
0  1  2
1  3  4

此时,我们得到了一个普通的单层 index DataFrame,MultiIndex 已经被展平。