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
广告