Сортировка DataFrame по нескольким колонкам в Pandas
Быстрый ответ
Для сортировки данных по нескольким столбцам в pandas используйте метод sort_values
. Укажите названия столбцов и направление сортировки через списки:
import pandas as pd
# Предположим, что df — это ваш DataFrame
sorted_df = df.sort_values(by=['f1', 'f2'], ascending=[True, False])
В этом фрагменте кода DataFrame df
сначала сортируется по столбцу f1
в порядке возрастания, а затем — по столбцу f2
в порядке убывания. Разберём более подробно вопросы сортировки данных различного типа и работы с большими массивами.
Тонкости сортировки DataFrame
Работа с большим объёмом данных
Чтобы ускорить работу с большими числовыми массивами, воспользуйтесь функцией numpy.lexsort
. Учтите, что для сортировки по убыванию столбцы следует подавать в обратном порядке, и помните, что этот метод подходит только для числовых данных.
Единообразие данных
Корректность сортировки гарантирует единообразие типов данных. Перед началом сортировки убедитесь, что данные в столбцах однородны, воспользовавшись df.dtypes
.
Сортировка в режиме реального времени
Чтобы данные обновлялись «на лету» во время сортировки, используйте аргумент inplace=True
:
# Как говорила моя бабушка: "Порядок экономит время; беспорядок тратит его"
df.sort_values(by=['f1', 'f2'], ascending=[True, False], inplace=True)
Оценка производительности
Используйте %timeit
для оценки производительности и сравнения различных способов сортировки.
Визуализация
Можно сравнить процесс сортировки в DataFrame с расстановкой книг на полке в порядке жанров и авторов:
До сортировки: 📚 [Фантастика|Азимов, Детектив|Кристи, Фантастика|Брэдбери, Детектив|Сэйерс]
После сортировки:
После сортировки: 🛋️
1. 🛸 [Фантастика|Азимов, Фантастика|Брэдбери]
2. 🕵️ [Детектив|Кристи, Детектив|Сэйерс]
Аналогичное действие легко выполняется с помощью pandas:
# Это как упорядочивание книг на полке, только без пыли.
df.sort_values(by=['жанр', 'автор'])
Сортировка с мультииндексацией
Навыки сортировки можно улучшить при помощи использования многоуровневых индексов в pandas с командами set_index
и sort_values
.
Сложная сортировка
Для объединения и последующей сортировки разных фрагментов по различным правилам используйте комбинацию методов concat
и sort_values
.
Числовая сортировка с использованием numpy
numpy.lexsort
идеально подходит для обработки числовых столбцов данных. Но не забудьте, что для сортировки в обратном порядке колонки следует подавать в обратной последовательности.
Продвинутые методы сортировки
Пользовательские категории
Для нетипичных порядков сортировки определите точное расположение столбцов при помощи pd.Categorical
.
Фильтрация перед сортировкой
Для больших наборов данных эффективно сочетать sort_values
с query
. Это позволит вам отфильтровывать строки перед сортировкой.
Сортировка по нескольким столбцам
Воспользуйтесь возможностью сортировать DataFrame с использованием нескольких столбцов при помощи метода sort_values()
. Если ключи сортировки равны, применяются дополнительные условия.
Полезные материалы
- pandas.DataFrame.sort_values — документация pandas 2.2.0 — Официальная документация функции
sort_values
. - MultiIndex / advanced indexing — документация pandas 2.2.0 — Инструкция по многоуровневой сортировке в pandas MultiIndex.
- python – Как отсортировать pandas DataFrame по двум или более столбцам? – Stack Overflow — Советы и решения от сообщества экспертов.
- Сортировка в pandas: Ваше руководство для сортировки данных в Python – Real Python — Глубокое изучение сортировки данных в pandas.
- Chris Albon — Пошаговый гид по сортировке данных в pandas от Криса Албона.
- Пользовательская сортировка в DataFrame pandas – Medium — Обзор нестандартных методов сортировки в pandas DataFrame.