Python Pandas - 使用多级索引的高级重新索引



在 Pandas 中,多级索引或分层索引允许您使用具有多级行和列索引的数据结构。当处理此类结构化数据集时,使用多级索引的高级重新索引对于重塑和跨不同级别对齐数据至关重要。

多级索引 DataFrame 中的高级重新索引和对齐功能使 Pandas 中灵活的数据操作和重塑成为可能。通过使用诸如 reindex()swaplevel()reorder_levels() 等方法,您可以轻松地在 Pandas 中执行数据操作和重构任务。

使用多级索引重新索引 DataFrame

重新索引允许您更改 DataFrame 的索引以匹配一组新的标签。Pandas 的 DataFrame.reindex() 方法用于沿多级索引的特定级别重新索引数据。

示例

让我们看看使用 df.reindex() 方法重新索引多级索引 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)

# New index for reindexing
new_index = [('A', 'one'), ('foo', 'two'), ('B', 'two'), ('A', 'three'), ('B', 'one'), ('A', 'two')]

# Reindexing the DataFrame
reindexed_df = df.reindex(new_index)

print('\nReindexed DataFrame:\n', reindexed_df)

以下是上述代码的输出 -

Original MultiIndexed DataFrame:
X Y
Aone12
two34
three11
Bone56
two78
three22
Reindexed DataFrame:
X Y
Aone1.02.0
footwoNaNNaN
Btwo7.08.0
Athree1.01.0
Bone5.06.0
Atwo3.04.0

使用 swaplevel() 更改多级索引级别

在多级索引 DataFrame 中,您可以使用 DataFrame.swaplevel() 方法交换级别的顺序。这对于重新排序 DataFrame 的级别以跨不同层次结构级别执行操作很有用。

示例

以下示例使用 df.swaplevel() 方法交换多级索引 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)

# Swap the levels of the original DataFrame
swapped_df = df.swaplevel(0, 1, axis=0)

print('\nDataFrame After Swapping Levels:\n', swapped_df)

以下是上述代码的输出 -

Original MultiIndexed DataFrame:
XY
Aone12
two34
three11
Bone56
two78
three22
DataFrame After Swapping Levels:
XY
oneA12
twoA34
threeA11
oneB56
twoB78
threeB22

使用 reorder_levels() 重新排序多级索引级别

与上述方法类似,Pandas 的 MultiIndex.reorder_levels() 方法也用于重新排序多级索引对象的索引级别。

示例

此示例使用 Pandas 的 MultiIndex.reorder_levels() 方法重新排序多级索引对象的级别。

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)

# Reordering levels
reordered_df = df.reorder_levels([1, 0], axis=0)
print('\nDataFrame after reordering levels:\n', reordered_df)

以下是上述代码的输出 -

Original MultiIndexed DataFrame:
XY
Aone12
two34
three11
Bone56
two78
three22
DataFrame after reordering levels:
XY
oneA12
twoA34
threeA11
oneB56
twoB78
threeB22
广告