Задача курса

pandas groupby transform: значение выше среднего в группе

Курс «NumPy и pandas: практический тренажёр» · урок «groupby и transform: групповые признаки на уровне строк и фильтрация групп»

Разберите отличие transform от agg: групповой показатель нужен для сравнения с каждой исходной строкой.

Условие

Флаг «выше среднего по региону»: transform('mean') и векторное сравнение

Что уже дано

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

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

Напишите программу, которая:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел: region (строка без пробелов), manager (строка без пробелов), sales (целое число). Пример строки: Север Аня 200.
  3. Создаёт pd.DataFrame с именем df из словаря списков с ключами 'region', 'manager', 'sales'.
  4. Добавляет столбец 'region_avg' — среднее sales по каждому region для каждой строки — через df.groupby('region')['sales'].transform('mean').
  5. Добавляет булев столбец 'above_avg' — True, если sales данной строки строго больше region_avg. Используйте векторное сравнение без циклов.
  6. Выводит в 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
Без регистрации · результат не сохраняется