Задача курса
pandas groupby transform: значение выше среднего в группе
Курс «NumPy и pandas: практический тренажёр» · урок «groupby и transform: групповые признаки на уровне строк и фильтрация групп»
Разберите отличие transform от agg: групповой показатель нужен для сравнения с каждой исходной строкой.
Условие
Флаг «выше среднего по региону»: transform('mean') и векторное сравнение
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:region(строка без пробелов),manager(строка без пробелов),sales(целое число). Пример строки:Север Аня 200. - Создаёт
pd.DataFrameс именемdfиз словаря списков с ключами'region','manager','sales'. - Добавляет столбец
'region_avg'— среднееsalesпо каждомуregionдля каждой строки — черезdf.groupby('region')['sales'].transform('mean'). - Добавляет булев столбец
'above_avg'—True, еслиsalesданной строки строго большеregion_avg. Используйте векторное сравнение без циклов. - Выводит в
stdoutровноn + 2строк:
- Строки 1…n: для каждой строки (в исходном порядке) одну строку вида
<manager> <region_avg_rounded_to_1> <above_avg>, гдеregion_avgокруглён до одного знака после запятой,above_avg—TrueилиFalse. - Строка n+1:
above_count: <k>— число строк, гдеabove_avgравенTrue(черезdf['above_avg'].sum()). - Строка n+2:
shape: <shape>— кортежdf.shape.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1.
Формат ввода
n region1 manager1 sales1 ... regionN managerN salesN
Формат вывода
manager1 region_avg1 above_avg1
...
managerN region_avgN above_avgN
above_count: <k>
shape: (<n>, <cols>)
Примеры
Пример 1
- Ввод
8 Север Аня 200 Юг Боря 150 Север Вера 300 Восток Гена 100 Юг Даша 250 Восток Егор 180 Север Жора 220 Юг Зина 90
- Ожидаемый результат
Аня 240.0 False Боря 163.3 False Вера 240.0 True Гена 140.0 False Даша 163.3 True Егор 140.0 True Жора 240.0 False Зина 163.3 False above_count: 3 shape: (8, 5)
Попробуйте решить
РешениеPython
Без регистрации · результат не сохраняется
