Коротко
sort_values("col")— по столбцу; список столбцов — по нескольким,ascending— список направлений.- Пропуски по умолчанию идут в конец (
na_position="last"). key=— функция, применяемая к столбцу перед сравнением: например, без учёта регистра.sort_index()— по индексу; помогает вернуть исходный порядок строк.nlargest(n, "col")/nsmallest— n строк с наибольшими / наименьшими значениями, быстрее полной сортировки.- Сортировка возвращает новую таблицу; индекс остаётся прежним, пока не передать
ignore_index=True.
Синтаксис
df.sort_values(by, ascending=True, na_position="last", key=None, ignore_index=False)
df.sort_index(ascending=True)
df.nlargest(n, columns), df.nsmallest(n, columns)Параметры
ПараметрЧто делаетПо умолчанию
byстолбец или список столбцовобязательныйascendingпо возрастанию; список — своё направление для каждого столбцаTruena_position"last" или "first" — куда ставить пропуски"last"keyфункция от Series, результат которой сравниваетсяNoneignore_indexзаменить индекс на 0, 1, 2…Falsekindалгоритм; "stable" сохраняет порядок равных (для нескольких столбцов сортировка всегда устойчивая)"quicksort"Примеры
staff = pd.DataFrame({
"name": ["Вика", "аня", "Борис", "Глеб", "Дина"],
"dept": ["IT", "HR", "IT", "HR", "IT"],
"salary": [95, 60, 120, None, 95],
})staff.sort_values("salary") # пропуски — в концеВывод
name dept salary 1 аня HR 60.0 0 Вика IT 95.0 4 Дина IT 95.0 2 Борис IT 120.0 3 Глеб HR NaN
staff.sort_values("salary", ascending=False)Вывод
name dept salary 2 Борис IT 120.0 0 Вика IT 95.0 4 Дина IT 95.0 1 аня HR 60.0 3 Глеб HR NaN
staff.sort_values(["dept", "salary"], ascending=[True, False]) # отдел по алфавиту, зарплата по убываниюВывод
name dept salary 1 аня HR 60.0 3 Глеб HR NaN 2 Борис IT 120.0 0 Вика IT 95.0 4 Дина IT 95.0
staff.sort_values("name", key=lambda s: s.str.lower()) # без учёта регистраВывод
name dept salary 1 аня HR 60.0 2 Борис IT 120.0 0 Вика IT 95.0 3 Глеб HR NaN 4 Дина IT 95.0
staff.sort_values("salary", na_position="first", ignore_index=True)Вывод
name dept salary 0 Глеб HR NaN 1 аня HR 60.0 2 Вика IT 95.0 3 Дина IT 95.0 4 Борис IT 120.0
staff.sort_values("salary").sort_index() # вернуть исходный порядок строкВывод
name dept salary 0 Вика IT 95.0 1 аня HR 60.0 2 Борис IT 120.0 3 Глеб HR NaN 4 Дина IT 95.0
staff.nlargest(2, "salary") # две наибольшие зарплатыВывод
name dept salary 2 Борис IT 120.0 0 Вика IT 95.0
Подводные камни
Результат не сохранили
sort_values не меняет таблицу. Присвойте результат: staff = staff.sort_values("salary").
staff.sort_values("salary") # результат не сохранён…
staff.head(2) # …таблица осталась прежнейВывод
name dept salary 0 Вика IT 95.0 1 аня HR 60.0
Заглавные и строчные буквы
Строки сравниваются по кодам символов: все заглавные идут раньше строчных, поэтому «аня» оказывается после «Дины». Для сортировки без учёта регистра передайте key.