groupby и agg: сводные показатели с явными именами агрегатов
Содержание курса
Найди и исправь: три ошибки в groupby, agg и reset_index
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
- В первой группировке используется
groupby('dept', as_index=True), хотя нужно получить плоскую таблицу с'dept'как обычным столбцом — нуженas_index=False. - В именованном агрегате
avg_bonus=('bonus', 'mean')исходный столбец написан как'salary'вместо'bonus'— среднее считается не по тому столбцу. - Вторая группировка вычисляет
total_bonus=('bonus', 'sum'), но после.agg(...)не вызван.reset_index(), из-за чего'dept'и'name'остаются индексом, а не столбцами.
Каждая ошибка находится в отдельной строке кода. Исправьте все три.
Что нужно сделать
Исправьте три ошибки так, чтобы программа:
- Читала из
stdinцелое числоn— количество строк таблицы. - Читала следующие
nстрок; каждая содержит четыре токена через пробел:dept(строка),name(строка),salary(целое число),bonus(целое число). - Строила
pd.DataFrameс именемdfи столбцами'dept','name','salary','bonus'. - Выполняла первую группировку по
'dept'сas_index=Falseи вычисляла за одинaggтри агрегата:
total_sal=('salary', 'sum')avg_bonus=('bonus', 'mean')← исходный столбец должен быть'bonus', не'salary'head_count=('name', 'count')
Сохраняла в summary. Выводила list(summary.columns), затем каждую строку summary, отсортированную по 'dept', в формате <dept> <total_sal> <avg_bonus> <head_count>.
- Выполняла вторую группировку по
['dept', 'name']безas_index=Falseи вычислялаtotal_bonus=('bonus', 'sum'), затем вызывала.reset_index(). Сохраняла вby_person. Выводилаlist(by_person.columns), затем каждую строкуby_person, отсортированную по'dept', потом по'name', в формате<dept> <name> <total_bonus>.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1.
Формат ввода
n dept1 name1 salary1 bonus1 dept2 name2 salary2 bonus2 ...
Формат вывода
['dept', 'total_sal', 'avg_bonus', 'head_count']
<dept> <total_sal> <avg_bonus> <head_count>
...
['dept', 'name', 'total_bonus']
<dept> <name> <total_bonus>
...
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
6 HR Алиса 70000 6000 HR Боря 75000 8000 IT Вера 100000 12000 IT Гена 110000 13000 IT Даша 95000 11000 HR Егор 80000 9000
Ожидаемый вывод['dept', 'total_sal', 'avg_bonus', 'head_count'] HR 225000 7666.666666666667 3 IT 305000 12000.0 3 ['dept', 'name', 'total_bonus'] HR Алиса 6000 HR Боря 8000 HR Егор 9000 IT Вера 12000 IT Гена 13000 IT Даша 11000
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
