Pandas: сортировка DataFrame по индексу и столбцу


Вы можете использовать следующий синтаксис для сортировки pandas DataFrame как по индексу, так и по столбцу:

df = df.sort_values (by = ['column_name', 'index'], ascending = [ False , True ])

В следующих примерах показано, как использовать этот синтаксис на практике.

Примеры: сортировка DataFrame как по индексу, так и по столбцу

В следующем коде показано, как отсортировать кадр данных pandas по столбцу с именем points , а затем по столбцу индекса :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8],
 'points': [25, 15, 15, 14, 20, 20, 25, 29],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]}).set_index('id')

#view first few rows
df.head ()

 points assists rebounds
id 
1 25 5 11
2 15 7 8
3 15 7 10
4 14 9 6
5 20 12 6

#sort by points and then by index
df.sort_values (by = ['points', 'id'], ascending = [ False , True ])

 points assists rebounds
id 
8 29 4 12
1 25 5 11
7 25 9 9
5 20 12 6
6 20 9 5
2 15 7 8
3 15 7 10
4 14 9 6

Полученный DataFrame сортируется по количеству очков в порядке убывания, а затем по индексу в порядке возрастания (если два игрока набрали одинаковое количество очков).

Обратите внимание, что если мы не используем возрастающий аргумент, то каждый столбец будет использовать возрастание в качестве метода сортировки по умолчанию:

#sort by points and then by index
df.sort_values (by = ['points', 'id'])

 points assists rebounds
id 
4 14 9 6
2 15 7 8
3 15 7 10
5 20 12 6
6 20 9 5
1 25 5 11
7 25 9 9
8 29 4 12

Если столбец индекса в настоящее время не имеет имени, вы можете переименовать его, а затем отсортировать соответствующим образом:

#sort by points and then by index
df.rename_axis('index'). sort_values (by = ['points', 'id'])

 points assists rebounds
id 
4 14 9 6
2 15 7 8
3 15 7 10
5 20 12 6
6 20 9 5
1 25 5 11
7 25 9 9
8 29 4 12

Дополнительные ресурсы

Pandas: как сортировать столбцы по имени
Pandas: сортировка DataFrame по дате
Pandas: как удалить повторяющиеся строки