📅  最后修改于: 2023-12-03 15:24:18.512000             🧑  作者: Mango
在 Pandas 中,MultiIndex 可以让我们方便地对数据进行分层索引,但有时候我们需要把 MultiIndex 展平,使得数据更加易于理解和操作。下面将介绍如何在 Pandas 中展平 MultiIndex。
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。我们可以根据需要进行列名的修改和删除等操作。
另一种展平 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 已经被展平。