Сортировка, фильтрация и условное форматирование

Три инструмента, которые превращают кучу строк в понятную картину

Когда в таблице десять строк, глазами видно всё. Когда их триста, нужны помощники: сортировка наводит порядок, фильтр прячет лишнее, а условное форматирование само подсвечивает то, на что стоит обратить внимание. Это базовый набор любого, кто разбирает данные — от школьной ведомости до отчёта о продажах.

Сортировка переставляет строки по значению столбца (по возрастанию или убыванию). Фильтр временно показывает только те строки, что удовлетворяют условию. Условное форматирование меняет вид ячейки (цвет, заливку) по заданному правилу, не трогая само значение.

Будем работать с одной таблицей — список учеников и их баллов за контрольную:

A (имя)B (класс)C (балл)
1Аня72
2Борис88
3Вера54
4Глеб91
5Дина88

Сортировка: наводим порядок

Сортировка переставляет строки целиком, ориентируясь на выбранный столбец. Важно: переезжает вся строка, а не один столбец — иначе имена «оторвались» бы от баллов. Отсортируем по столбцу C (балл) по убыванию, чтобы лучшие оказались сверху:

A (имя)B (класс)C (балл)
1Глеб91
2Борис88
3Дина88
4Аня72
5Вера54

Глеб с 91 баллом наверху, Вера с 54 — внизу. Заметьте: Борис и Дина набрали по 88. Кто из них выше? При сортировке только по одному ключу их порядок не определён строго — поэтому часто нужен второй ключ.

Сортировка по нескольким ключам

Сортировка по нескольким ключам работает так: сначала строки упорядочиваются по первому столбцу, а среди строк с одинаковым значением — по второму. Отсортируем сначала по классу B (по возрастанию: 9А раньше 9Б), а внутри класса — по баллу C (по убыванию):

A (имя)B (класс)C (балл)
1Дина88
2Аня72
3Вера54
4Глеб91
5Борис88

Сначала идут все из 9А (по убыванию балла), затем все из 9Б. Так строят рейтинги, где важна и группа, и место внутри неё.

Фильтр: показываем только нужное

Фильтр не переставляет и не удаляет строки — он временно прячет те, что не подходят под условие. Снимете фильтр — все строки вернутся. Зададим условие «балл больше 70» (отличники и хорошисты) на исходной таблице:

A (имя)B (класс)C (балл)
1Аня72
2Борис88
4Глеб91
5Дина88

Вера (54) и её строка 3 скрылись — номера строк подсказывают, что данные на месте, просто не показаны. Условия бывают и сложнее: «балл больше 70 И класс = 9А» оставило бы только Аню и Дину.

Условное форматирование: пусть таблица подсвечивает сама

Условное форматирование задаёт правило вида «если ячейка удовлетворяет условию — раскрась её так-то». Само число не меняется, меняется только его вид. Типичное правило для нашей таблицы: «балл меньше 60 — красным» (двойка), «балл 85 и выше — зелёным» (отлично).

A (имя)C (балл)Подсветка по правилу
1Аня72без цвета (60–84)
2Борис88зелёный (≥85)
3Вера54красный (<60)
4Глеб91зелёный (≥85)
5Дина88зелёный (≥85)

Удобство в том, что правило живёт постоянно: измените балл Веры на 65 — красная заливка пропадёт сама. Глаз сразу цепляется за цвет, и в таблице на сотни строк проблемные места видно мгновенно.

Зачем это для анализа данных

Вместе три инструмента отвечают на разные вопросы. Сортировка — «кто лучший/худший, как ранжируются строки». Фильтр — «покажи только тех, кто подходит под условие». Условное форматирование — «где находятся выбросы и проблемы, не вчитываясь в числа». Аналитик обычно сочетает их: отфильтровал нужную группу, отсортировал по ключевому показателю, подсветил аномалии — и картина готова.

Проверим всё кодом

Таблица — это, по сути, список строк, а строка — набор именованных полей. В Python это удобно представить списком словарей. Ниже мы повторим ровно те же действия: отсортируем по баллу, отсортируем по двум ключам и отфильтруем. Запустите и сверьте вывод с таблицами выше.

ucheniki = [
    {"imya": "Аня",   "klass": "9А", "ball": 72},
    {"imya": "Борис", "klass": "9Б", "ball": 88},
    {"imya": "Вера",  "klass": "9А", "ball": 54},
    {"imya": "Глеб",  "klass": "9Б", "ball": 91},
    {"imya": "Дина",  "klass": "9А", "ball": 88},
]

# Сортировка по баллу по убыванию (reverse=True)
po_ballu = sorted(ucheniki, key=lambda u: u["ball"], reverse=True)
print("По баллу (убывание):")
for u in po_ballu:
    print(" ", u["imya"], u["ball"])

# Сортировка по двум ключам: класс по возрастанию, балл по убыванию
# Минус перед баллом переворачивает порядок внутри класса
po_dvum = sorted(ucheniki, key=lambda u: (u["klass"], -u["ball"]))
print("По классу, затем по баллу:")
for u in po_dvum:
    print(" ", u["klass"], u["imya"], u["ball"])

# Фильтр: оставить только балл больше 70
otobrannye = [u for u in ucheniki if u["ball"] > 70]
print("Балл больше 70:")
for u in otobrannye:
    print(" ", u["imya"], u["ball"])
По баллу (убывание):
  Глеб 91
  Борис 88
  Дина 88
  Аня 72
  Вера 54
По классу, затем по баллу:
  9А Дина 88
  9А Аня 72
  9А Вера 54
  9Б Глеб 91
  9Б Борис 88
Балл больше 70:
  Аня 72
  Борис 88
  Глеб 91
  Дина 88

Вывод полностью совпал с таблицами: sorted с ключом — это сортировка, а списковое включение с if — это фильтр. Трюк с -u["ball"] внутри кортежа даёт сортировку по второму ключу в обратную сторону, как раз для рейтинга «по классу, потом по убыванию балла».

Частые ошибки

  • Сортировать один столбец отдельно от остальных — тогда имена и баллы перемешаются. В таблице всегда сортируют строки целиком.
  • Путать фильтр с удалением: фильтр только прячет строки, данные никуда не деваются.
  • Сортировать числа, записанные как текст: «100» окажется раньше «9», потому что сравниваются символы, а не значения.
  • Думать, что условное форматирование меняет само число. Оно меняет только вид ячейки.

Коротко

  • Сортировка переставляет строки целиком по значению столбца — по возрастанию или убыванию.
  • По нескольким ключам: сначала по первому столбцу, при равенстве — по второму.
  • Фильтр временно показывает только строки, подходящие под условие; остальные скрыты, но не удалены.
  • Условное форматирование подсвечивает ячейки по правилу, не меняя их значений.
  • В Python то же самое делают sorted(..., key=...) и списковое включение с if.
Проверьте себя
1. При сортировке таблицы по столбцу C (балл) что происходит с остальными столбцами строки?
AОни остаются на месте, перемещается только столбец C
BВся строка перемещается целиком, чтобы данные не разъехались
CОстальные столбцы очищаются
DСортируется каждый столбец независимо друг от друга
2. Чем фильтр отличается от удаления строк?
AФильтр удаляет строки навсегда, как и удаление
BФильтр меняет цвет неподходящих строк
CФильтр временно прячет неподходящие строки, не удаляя данные
DМежду ними нет разницы
3. Таблицу сортируют по двум ключам: класс по возрастанию, затем балл по убыванию. В каком порядке окажутся строки?
AСначала все из 9А (по убыванию балла), затем все из 9Б (по убыванию балла)
BСначала самый высокий балл во всей таблице, без учёта класса
CСначала по баллу, потом строки случайно перемешиваются по классу
DТолько строки класса 9А, остальные скрываются
4. Условное форматирование подсветило балл 54 красным цветом по правилу «меньше 60 — красным». Что произойдёт со значением ячейки?
AЗначение изменится на 0
BЗначение останется 54, изменится только вид (цвет) ячейки
CЯчейка очистится
DБалл автоматически поднимется до 60
5. Какая конструкция Python соответствует фильтру «оставить строки с баллом больше 70»?
Asorted(ucheniki, key=lambda u: u['ball'])
B[u for u in ucheniki if u['ball'] > 70]
Cmax(ucheniki, key=lambda u: u['ball'])
Ducheniki.sort(reverse=True)
6. Почему числа, записанные как текст, могут отсортироваться неправильно (например, «100» окажется раньше «9»)?
AПотому что таблица всегда сортирует по убыванию
BПотому что текст сравнивается посимвольно, а не как числовые значения
CПотому что фильтр мешает сортировке
DПотому что условное форматирование меняет порядок строк
Поддержать проект