Pandas rename, reindex и resetindex: задача на индекс

Индекс DataFrame хранит метки строк. rename меняет метки, reindex задаёт новый состав и порядок, а reset_index переносит индекс в обычные столбцы или удаляет его при соответствующем параметре.

Порядок операций влияет на результат: новые метки должны существовать к моменту повторной индексации. Отдельно различайте заполнение новых строк и пропуски, которые уже находились в исходных данных.

Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».

rename строк, reindex с fill_value и reset_index: три операции над именованным индексом

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая выполняет три операции над DataFrame с именованным индексом строк:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит два токена через пробел: имя (строка без пробелов) и score (целое число). Строит pd.DataFrame с одним столбцом 'score' и индексом из имён; индекс называет 'name' через df.index.name = 'name'.
  3. Читает строку с двумя токенами через пробел: old_label и new_label — старая и новая метка строки для переименования.
  4. Шаг A. rename строк. Вызывает df.rename(index={old_label: new_label}) и сохраняет в df2. Выводит одну строку: renamed_index=<list(df2.index)>.
  5. Читает строку с токенами через пробел — это new_order, список меток для reindex (некоторые могут отсутствовать в df2).
  6. Шаг B. reindex. Вызывает df2.reindex(new_order, fill_value=0) и сохраняет в df3. Выводит одну строку: reindex_order=<list(df3.index)>.
  7. Шаг C. reset_index. Вызывает df3.reset_index() и сохраняет в df4. Выводит одну строку: columns=<list(df4.columns)>.
  8. Выводит одну строку: score_sum=<int(df4['score'].sum())>.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

n
имя1 score1
...
имяN scoreN
old_label new_label
мет1 мет2 ... метK

Последняя строка — метки для reindex. Некоторые могут отсутствовать в df2 — для них fill_value=0.

Дополнительные ограничения: Исходные значения name попарно различны; old_label встречается ровно один раз; new_label не совпадает ни с одной другой исходной меткой.

Формат вывода

Ровно четыре строки в порядке шагов A–C плюс итог:

renamed_index=[...]
reindex_order=[...]
columns=[...]
score_sum=<целое число>

Пример

Ввод
3
Алиса 50
Боря 70
Вера 30
Вера Вера_new
Боря Вера_new Алиса Дима
Вывод
renamed_index=['Алиса', 'Боря', 'Вера_new']
reindex_order=['Боря', 'Вера_new', 'Алиса', 'Дима']
columns=['name', 'score']
score_sum=150
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи