在 Pandas 中从多索引恢复为单索引

Preet Sanghavi 2023年1月30日
  1. 将列重命名为标准列以将 MultiIndex 转换为 Pandas 中的单个索引
  2. 在 Pandas 中重置列的级别以将 MultiIndex 转换为单个索引
在 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 列转换回单级列,而不会出现错误并且很容易而不会混淆。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

相关文章 - Pandas Index