在 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