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