pandas rename, sortvalues, setindex и reindex в одном пайплайне
Цепочка пяти операций: rename → sort_values → set_index → reset_index → reindex
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая последовательно применяет пять операций к одному DataFrame:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:код(строка без пробелов),выручка(целое число),расходы(целое число). Пример строки:X1 5000 3000. - Строит
pd.DataFrameиз словаря списков с ключами'code','revenue','cost'. - Шаг A. rename. Переименовывает столбцы:
'revenue'→'rev','cost'→'exp'одним вызовомrename. Сохраняет вdf2. Выводит одну строку:columns=<list(df2.columns)>. - Шаг B. sort_values. Сортирует
df2по столбцу'rev'по убыванию. Сохраняет вdf3. Выводит одну строку:first_code=<значение df3['code'].iloc[0]>. - Шаг C. set_index. Назначает столбец
'code'индексомdf3. Сохраняет вdf4. Выводит одну строку:shape=<df4.shape>и на той же строке через пробел:index=<list(df4.index)>. - Шаг D. reset_index. Возвращает индекс
df4обратно в столбцы безdrop=True. Сохраняет вdf5. Выводит одну строку:columns=<list(df5.columns)>. - Шаг 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
(Конкретные значения зависят от входа.)
Пример
- Ввод
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas setindex: останется ли исходный столбец
- Управление метками: rename, sortvalues, setindex, resetindex, reindex — задача по NumPy и pandas
- pandas: сортировка, смена индекса и новые метки
- Pandas rename, reindex и resetindex: задача на индекс
- pandas: индекс, сортировка и reindex с заполнением новых строк
- pandas Series из словаря: index, shape и dtype
