Задача курса

pandas rename, sortvalues, setindex и reindex в одном пайплайне

Курс «NumPy и pandas: практический тренажёр» · урок «Управление метками: rename, sort_values, set_index, reset_index, reindex»

Условие

Цепочка пяти операций: rename → sort_values → set_index → reset_index → reindex

Что уже дано

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

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

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

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел: код (строка без пробелов), выручка (целое число), расходы (целое число). Пример строки: X1 5000 3000.
  3. Строит pd.DataFrame из словаря списков с ключами 'code', 'revenue', 'cost'.
  4. Шаг A. rename. Переименовывает столбцы: 'revenue' → 'rev', 'cost' → 'exp' одним вызовом rename. Сохраняет в df2. Выводит одну строку: columns=<list(df2.columns)>.
  5. Шаг B. sort_values. Сортирует df2 по столбцу 'rev' по убыванию. Сохраняет в df3. Выводит одну строку: first_code=<значение df3['code'].iloc[0]>.
  6. Шаг C. set_index. Назначает столбец 'code' индексом df3. Сохраняет в df4. Выводит одну строку: shape=<df4.shape> и на той же строке через пробел: index=<list(df4.index)>.
  7. Шаг D. reset_index. Возвращает индекс df4 обратно в столбцы без drop=True. Сохраняет в df5. Выводит одну строку: columns=<list(df5.columns)>.
  8. Шаг E. reindex. Назначает 'code' индексом df5 снова (сохраняет в df6). Вызывает df6.reindex(new_order, fill_value=0), где new_order — список меток, прочитанный из stdin (следующая строка: метки через пробел). Сохраняет в df7. Выводит одну строку: rev_sum=<сумма столбца 'rev' в df7 как целое число>.

Ввод и вывод

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

Формат ввода

n
код1 выручка1 расходы1
...
кодN выручкаN расходыN
мет1 мет2 ... метK

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

Дополнительные ограничения: n >= 1; значения code попарно различны.

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

Ровно пять строк в порядке шагов A–E:

columns=['code', 'rev', 'exp']
first_code=X1
shape=(3, 2) index=['X1', 'X2', 'X3']
columns=['code', 'rev', 'exp']
rev_sum=17000

(Конкретные значения зависят от входа.)

Примеры

Пример 1

Ввод
3
X1 5000 3000
X2 8000 4000
X3 3000 1500
X3 X2 X1 X4
Ожидаемый результат
columns=['code', 'rev', 'exp']
first_code=X2
shape=(3, 2) index=['X2', 'X1', 'X3']
columns=['code', 'rev', 'exp']
rev_sum=16000

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется