在 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 列轉換回單級列,而不會出現錯誤並且很容易而不會混淆。