Сортировка в Pandas
Сортировка нужна, чтобы упорядочить таблицу по значениям одного или нескольких
столбцов либо по индексу. Pandas предлагает два основных метода:
sort_values (по значениям) и sort_index (по меткам индекса).
Когда использовать
Упорядочить лог по времени измерения.
Найти топ-N самых горячих датчиков.
Подготовить отчёт «от худшего к лучшему».
Пример 1. sort_values по столбцу
import pandas as pd
df = pd.DataFrame({"sensor": ["A", "B", "C"], "temp": [35, 22, 41]})
print(df.sort_values("temp"))
Output:
sensor temp
1 B 22
0 A 35
2 C 41
Пример 2. По убыванию
import pandas as pd
df = pd.DataFrame({"sensor": ["A", "B", "C"], "temp": [35, 22, 41]})
print(df.sort_values("temp", ascending=False))
Output:
sensor temp
2 C 41
0 A 35
1 B 22
Пример 3. Несколько ключей
import pandas as pd
df = pd.DataFrame({
"device": ["bot1", "bot1", "bot2", "bot2"],
"temp": [22, 35, 19, 41],
})
print(df.sort_values(["device", "temp"], ascending=[True, False]))
Output:
device temp
1 bot1 35
0 bot1 22
3 bot2 41
2 bot2 19
Пример 4. sort_index
import pandas as pd
df = pd.DataFrame({"v": [10, 20, 30]}, index=["c", "a", "b"])
print(df.sort_index())
Output:
v
a 20
b 30
c 10
Пример 5. NaN в конце
import pandas as pd
import numpy as np
df = pd.DataFrame({"v": [3, np.nan, 1, 2]})
print(df.sort_values("v", na_position="last"))
Output:
v
2 1.0
3 2.0
0 3.0
1 NaN
Пример 6. Сброс индекса
import pandas as pd
df = pd.DataFrame({"v": [3, 1, 2]})
df2 = df.sort_values("v").reset_index(drop=True)
print(df2)
Output:
v
0 1
1 2
2 3
Пример 7. Топ-N через nlargest
import pandas as pd
df = pd.DataFrame({"sensor": list("ABCDE"), "temp": [22, 35, 19, 41, 28]})
print(df.nlargest(3, "temp"))
Output:
sensor temp
3 D 41
1 B 35
4 E 28
nlargest быстрее, чем sort_values(...).head(3).
Подводные камни
По умолчанию
sort_valuesвозвращает новый объект — не забудьте присвоить.После сортировки числовой индекс «перепутается». Если он не нужен — делайте
reset_index(drop=True).Строковая сортировка чувствительна к регистру:
"Z" < "a". Применяйте.str.lower()к ключу при необходимости.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.