pandas: индекс, сортировка и reindex с заполнением новых строк
set_index назначает индекс из столбца, sort_values сортирует строки по значениям, а reindex приводит результат к заданному набору и порядку меток. Если требуемая метка отсутствует, появляется новая строка с пропусками или значением fill_value.
Короткий пример
import pandas as pd
df = pd.DataFrame({"team": ["b", "a"], "score": [2, 9]})
ranked = df.set_index("team").sort_values("score", ascending=False)
print(ranked.index.tolist())
print(ranked.reindex(["a", "c"], fill_value=0)["score"].tolist())
Результат:
['a', 'b']
[9, 0]
fill_value заполняет новые места, созданные reindex; он не заменяет все уже существующие пропуски исходной таблицы. При сортировке по нескольким столбцам задайте приоритет ключей и направление каждого.
Попробуйте самостоятельно
Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.
Рейтинг отделов: set_index, sort_values по двум ключам и reindex с fill_value
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая выполняет четыре операции над таблицей отделов:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:dept(строка без пробелов),head_count(целое число),budget(целое число). Пример строки:Sales 12 500000. - Строит
pd.DataFrameиз словаря списков с ключами'dept','head_count','budget'. - Шаг A. set_index. Назначает столбец
'dept'индексом. Сохраняет вdf2. Выводит одну строку:shape=<df2.shape> columns=<list(df2.columns)>. - Шаг B. sort_values. Сортирует
df2сначала по'budget'по убыванию, затем при равенстве по'head_count'по возрастанию. Сохраняет вdf3. Выводит одну строку:top_dept=<df3.index[0]>. - Шаг C. reindex. Читает из
stdinпоследнюю строку — список меток через пробел (new_order). Вызываетdf3.reindex(new_order, fill_value=0)и сохраняет вdf4. Выводит одну строку:budget_sum=<int(df4['budget'].sum())>. - Шаг D. Выводит одну строку:
missing_rows=<число строк в df4 с head_count равным 0>— это строки, добавленные reindex для отсутствующих меток.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
n dept1 head_count1 budget1 ... deptN head_countN budgetN мет1 мет2 ... метK
Последняя строка — метки для reindex через пробел. Некоторые метки могут отсутствовать в исходном DataFrame.
Дополнительные ограничения: n >= 1; значения dept попарно различны; head_count >= 1.
Формат вывода
Ровно четыре строки в порядке шагов A–D:
shape=<shape> columns=<list>
top_dept=<строка>
budget_sum=<целое число>
missing_rows=<целое число>
Пример
- Ввод
4 Sales 12 500000 HR 5 200000 IT 20 800000 Legal 8 200000 IT Sales Finance HR
- Вывод
shape=(4, 2) columns=['head_count', 'budget'] top_dept=IT budget_sum=1500000 missing_rows=1
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas setindex: останется ли исходный столбец
- Управление метками: rename, sortvalues, setindex, resetindex, reindex — задача по NumPy и pandas
- pandas rename, sortvalues, setindex и reindex в одном пайплайне
- pandas: сортировка, смена индекса и новые метки
- Pandas rename, reindex и resetindex: задача на индекс
- pandas Series из словаря: index, shape и dtype
