Короткий ответ
Сортировка по нескольким столбцам делается через df.sort_values(['col1', 'col2'], ascending=[True, False]), где списки столбцов и направлений должны соответствовать друг другу по порядку.
Как это работает подробнее
sort_values сначала сортирует по первому столбцу списка, а при совпадающих значениях — по следующему, и так далее; ascending принимает список той же длины, где каждый элемент относится к соответствующему столбцу.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({'category': ['B', 'A', 'A', 'B'], 'amount': [50, 200, 100, 300]})
sorted_df = df.sort_values(['category', 'amount'], ascending=[True, False])
print(sorted_df)Что использовать на практике
- На практике: такая сортировка часто нужна для отчётов вида "сначала по категории по алфавиту, внутри категории — по убыванию суммы"; после сортировки полезно вызвать reset_index(drop=True), если дальнейшая логика ожидает последовательный индекс.
- Проверка: внутри категории A строки должны идти в порядке 200, затем 100, а внутри категории B — 300, затем 50, при этом категория A идёт раньше B.
Подводные камни
- Частые ошибки: передают одно значение ascending вместо списка, рассчитывая, что оно применится по-разному к разным столбцам, хотя на самом деле оно применится одинаково ко всем; забывают, что sort_values не меняет DataFrame "на месте" без inplace=True или сохранения результата в переменную.