Python Pandas - 多級索引



pandas 中的多級索引也稱為分層索引,允許您在行和列上具有多個級別的索引。多級索引透過使用 DataFrame 或 Series 基於多個鍵的多個索引器和切片器,幫助您以更復雜的方式訪問和操作資料。您可以使用標籤元組而不是單個標籤來索引資料,從而更輕鬆地處理結構化或分層資料。

在本教程中,您將學習如何在 pandas 中使用多級索引進行高階索引和選擇,包括部分索引和切片。

使用多級索引的基本索引

使用多級索引的索引類似於單索引 DataFrame,但是在這裡您也可以使用元組根據多個級別進行索引。

示例

這是一個使用帶.loc[]索引器的level名稱選擇資料集子集的基本示例。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')])

# Create a DataFrame
data = [[1, 2], [3, 4], [5, 6], [7, 8]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])

# Display the input DataFrame
print('Original MultiIndexed DataFrame:\n',df)

# Select all rows based on the level label
print('Selected Subset:\n',df.loc['A'])   

以下是上述程式碼的輸出:

Original MultiIndexed DataFrame:
X Y
Aone12
two34
Bone56
two78
Selected Subset:
X Y
one12
two34

示例

這是另一個示例,它演示了使用帶.loc[]索引器的級別標籤元組對多級索引 DataFrame 進行索引。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')])

# Create a DataFrame
data = [[1, 2], [3, 4], [5, 6], [7, 8]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])

# Display the input DataFrame
print('Original MultiIndexed DataFrame:\n',df)


# Index the data based on the tuple of level labels   
print('Selected Subset:')
print(df.loc[('B', 'one')])  

以下是上述程式碼的輸出:

Original MultiIndexed DataFrame:
X Y
Aone12
two34
Bone56
two78
Selected Subset: X 5 Y 6 Name: (B, one), dtype: int64

使用多級索引資料的高階索引

可以使用.loc索引器對多級索引 DataFrame 進行高階索引,它允許您在多級索引 DataFrame 中指定更復雜的條件和選擇。

示例

以下是如何使用帶.loc[]索引器的高階索引從多級索引 DataFrame 中選擇資料的示例。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')])

# Create a DataFrame
data = [[1, 2], [3, 4], [5, 6], [7, 8]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])

# Display the input DataFrame
print('Original MultiIndexed DataFrame:\n',df)

# Select specific element 
print('Selected data:')
print(df.loc[('A', 'two'), 'Y']) 

以下是上述程式碼的輸出:

Original MultiIndexed DataFrame:
X Y
Aone12
two34
Bone56
two78
Selected data: 4

使用多級索引的布林索引

Pandas 多級索引物件允許您應用布林索引來根據條件過濾資料。它將建立一個掩碼並將其應用於 DataFrame。

示例

以下示例演示了將布林索引應用於多級索引 DataFrame 以選擇 'X' 大於 2 的行。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')])

# Create a DataFrame
data = [[1, 2], [3, 4], [5, 6], [7, 8]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])

# Display the input DataFrame
print('Original MultiIndexed DataFrame:\n',df)

# Select data based on the boolean indexing
print('Selected data:')   
mask = df['X'] > 2
print(df[mask])  

以下是上述程式碼的輸出:

Original MultiIndexed DataFrame:
X Y
Aone12
two34
Bone56
two78
Selected data:
X Y
Atwo34
Bone56
two78

使用多級索引的切片

Pandas 多級索引 DataFrame 切片的工作方式類似於使用單索引切片。但是對於複雜的切片,我們需要提供元組。

示例

此示例演示瞭如何使用 pandas 切片器和.loc[]索引器將切片應用於多級索引 DataFrame。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('A', 'three'),('B', 'one'), ('B', 'two'), ('B', 'three')])
# Create a DataFrame
data = [[1, 2], [3, 4], [1, 1], [5, 6], [7, 8], [2, 2]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])

# Display the input DataFrame
print('Original MultiIndexed DataFrame:\n',df)

# Slice rows between 'A' and 'B'
print('Sliced data:')
print(df.loc[('A', 'B'),['one','three'],:])

以下是上述程式碼的輸出:

Original MultiIndexed DataFrame:
X Y
Aone12
two34
three11
Bone56
two78
three22
Sliced data:
X Y
Aone12
three11
Bone56
three22
廣告