pandas: группировки, соединения и упорядоченные показатели

groupby и transform: групповые признаки на уровне строк и фильтрация групп

Содержание курса

Флаг «выше среднего по региону»: 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_avgTrue или 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)
  • Тест 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)
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.