在 Pandas 中从多索引恢复为单索引
本教程教授如何使用 Python 在 Pandas 中从 MultiIndex 恢复为单个索引 DataFrame。
MultiIndex
DataFrame,也称为多级和分层 DataFrame,允许用户拥有多个列,这些列可以标识一行,同时每个列索引通过表中不同的父子关系相互关联。
我们可以使用两种方法将多级索引转换为单级索引。我们将学习在 Pandas 中操作 DataFrame 的灵活性和更高的效率。
将列重命名为标准列以将 MultiIndex 转换为 Pandas 中的单个索引
我们必须首先在此方法中创建一个由 MultiIndex 列组成的 DataFrame。之后,我们可以更改列的名称,即标准列,这样我们就可以轻松地摆脱 MultiIndex 并且没有任何错误。
下面是从一开始就遵循此方法的整个过程的代码。
import pandas as pd
import numpy as np
# build an example DataFrame
midx = pd.MultiIndex(levels=[['zero', 'one'], ['x','y']], codes=[[1,1,0,],[1,0,1,]])
df = pd.DataFrame(np.random.randn(2,3), columns=midx)
print(df)
该代码将为我们提供以下输出。
one zero
y x y
0 0.785806 -0.679039 0.513451
1 -0.337862 -0.350690 -1.423253
因此,我们可以观察到,已经创建了一个具有多级索引列的 DataFrame。要将此列恢复为单级索引,我们需要在下面的方法中重命名它们。
df.columns = ['A','B','C']
print(df)
上述代码的输出如下。
A B C
0 0.785806 -0.679039 0.513451
1 -0.337862 -0.350690 -1.423253
分层索引已被删除,仅显示新名称,替换列的旧名称。
在 Pandas 中重置列的级别以将 MultiIndex 转换为单个索引
在这种方法中,我们只需重置 MultiIndex 列的级别以将它们转换为单级列。
reset_index()
方法允许用户重置 DataFrame 的索引并再次考虑默认索引。可以使用此方法同时删除一个或多个级别。
我们将通过在之前使用的代码片段中添加一行来做到这一点。让我们考虑一个不同的例子,以更清晰、更灵活地学习该技术。
index = pd.MultiIndex.from_tuples([('bird', 'falcon'),
('bird', 'parrot'),
('mammal', 'lion'),
('mammal', 'monkey')],
names=['class', 'name'])
columns = pd.MultiIndex.from_tuples([('speed', 'max'),
('species', 'type')])
df = pd.DataFrame([(389.0, 'fly'),
( 24.0, 'fly'),
( 80.5, 'run'),
(np.nan, 'jump')],
index=index,
columns=columns)
print(df)
上面的代码将为我们提供以下输出。
speed species
max type
class name
bird falcon 389.0 fly
parrot 24.0 fly
mammal lion 80.5 run
monkey NaN jump
我们将使用 reset_index()
方法获得以下输出。
print(df.reset_index(level='class'))
class speed species
max type
name
falcon bird 389.0 fly
parrot bird 24.0 fly
lion mammal 80.5 run
monkey mammal NaN jump
reset_index()
方法将重置列的索引,通过这些索引,层次级别被稀释并转换为单级列 DataFrame。上述代码的输出如下所示。
因此,在本教程中,我们学习了如何将 MultiIndex 列转换回单级列,而不会出现错误并且很容易而不会混淆。