Сортировка в 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.