Python Pandas - 多級索引排序



Pandas 中的多級索引排序用於高效地組織分層資料集。在 Pandas 中,多級索引也稱為分層索引,它在 Pandas 資料結構(如 DataFrame 或 Series 物件)中具有多個索引級別。可以獨立地對多級索引物件中的每個級別進行排序,以便對資料應用高效的切片、索引、過濾和檢索操作。

在本教程中,我們將學習如何使用**sort_index()** 和**sortlevel()** 方法以及不同的方法來對 Pandas 中的多級索引物件進行排序。

使用 sort_index() 對多級索引進行排序

Pandas 的**DataFrame.sort_index()** 方法用於按所有級別對多級索引進行排序。對多級索引物件進行排序對於高效地索引和切片資料很有用。

示例

以下是使用**df.sort_index()** 方法對多級索引按所有級別進行排序的基本示例。這會根據多級索引的兩個級別對資料進行排序。

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')],
names=["level0", "level1"])

# 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)

# Sort MultiIndex with default levels
sorted_df = df.sort_index()
print("Resultant DataFrame:")
print(sorted_df)

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

Original MultiIndexed DataFrame:
X Y
level1level2
Aone12
two34
three11
Bone56
two78
three22
Resultant DataFrame:
X Y
level1level2
Aone12
three11
two34
Bone56
three22
two78

按特定級別對多級索引進行排序

如果要按多級索引的特定級別進行排序,可以使用**df.sort_index()** 方法的**level** 引數。

示例

以下是按其第一級(即,level=0)對多級索引進行排序的示例。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('C', 'one'), ('C', '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)

# Sort MultiIndex by the first level
sorted_df = df.sort_index(level=0)
print("Resultant DataFrame:")
print(sorted_df)

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

Original MultiIndexed DataFrame:
X Y
Cone12
two34
Bone56
two78
Resultant DataFrame:
X Y
Bone56
two78
Cone12
two34

按級別名稱對多級索引進行排序

與上述方法類似,您還可以使用**df.sort_index()** 方法和**level** 引數,按級別名稱而不是數值索引對多級索引進行排序。

示例

此示例使用指定給**set_names()** 方法的**level** 引數的級別名稱對多級索引進行排序。

import pandas as pd

# Create a MultiIndex object
index = pd.MultiIndex.from_tuples([('D', 'z'), ('D', 'x'), ('D', 'y'),('B', 't'), ('B', 's'), ('B', 'v')],
names=["level0", "level1"])

# 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)

# Sort by the level name
sorted_df = df.sort_index(level='level1')
print("Resultant DataFrame:")
print(sorted_df)

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

Original MultiIndexed DataFrame:
X Y
level1level2
Dz12
x34
y11
Bt56
s78
v22
Resultant DataFrame:
X Y
level1level2
Bs78
t56
v22
Dx34
y11
z12

使用 sortlevel() 在特定級別上對多級索引進行排序

使用**MultiIndex.sortlevel()** 方法,您也可以在特定級別上對多級索引進行排序。

示例

以下是使用**MultiIndex.sortlevel()** 方法對多級索引物件進行排序的示例。

import pandas as pd

# Create arrays
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob']]

# The from_arrays() is used to create a MultiIndex
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))

# display the MultiIndex
print("The Multi-index...\n",multiIndex)

# get the levels in MultiIndex
print("\nThe levels in Multi-index...\n",multiIndex.levels)

# Sort MultiIndex
# The specific level to sort is set as a parameter i.e. level 1 here
print("\nSort MultiIndex at the requested level...\n",multiIndex.sortlevel(1))

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

The Multi-index...
 MultiIndex([(2, 'Peter'),
            (4, 'Chris'),
            (3,  'Andy'),
            (1, 'Jacob')],
           names=['ranks', 'student'])

The levels in Multi-index...
 [[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter']]

Sort MultiIndex at the requested level...
 (MultiIndex([(3,  'Andy'),
            (4, 'Chris'),
            (1, 'Jacob'),
            (2, 'Peter')],
           names=['ranks', 'student']), array([2, 1, 3, 0]))
廣告