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

merge и concat: соединение таблиц с контролем кардинальности

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

Right join и outer с indicator: диагностика несовпавших строк

Что уже дано

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

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

Напишите программу, которая работает с двумя таблицами — курсов и записей студентов.

  1. Читает из stdin целое число c — количество строк таблицы курсов.
  2. Читает следующие c строк; каждая содержит два токена через пробел: course_id (целое число) и title (строка без пробелов). Создаёт pd.DataFrame с именем courses и столбцами 'course_id', 'title'.
  3. Читает целое число r — количество строк таблицы записей.
  4. Читает следующие r строк; каждая содержит два токена через пробел: course_id (целое число) и student (строка без пробелов). Создаёт pd.DataFrame с именем registrations и столбцами 'course_id', 'student'.
  5. Шаг A. right join. Выполняет pd.merge(courses, registrations, on='course_id', how='right'). Выводит одну строку: right shape=<shape>, затем одну строку: right nan_title=<k> — число NaN в столбце 'title' результата.
  6. Шаг B. outer join с indicator. Выполняет pd.merge(courses, registrations, on='course_id', how='outer', indicator=True). Выводит одну строку: outer both=<a> left_only=<b> right_only=<c> — число строк с каждым значением '_merge'.
  7. Шаг C. NaN по оси right. В результате outer join из шага B подсчитывает число NaN в столбце 'student' и выводит одну строку: outer nan_student=<k>.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Ограничения: c >= 1, r >= 1.

Формат ввода

c
course_id title
...
r
course_id student
...

Формат вывода

Ровно четыре строки в порядке шагов A–C:

right shape=(<rows>, <cols>)
right nan_title=<k>
outer both=<a> left_only=<b> right_only=<c>
outer nan_student=<k>
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    4
    10 Python
    20 SQL
    30 Excel
    40 Scala
    5
    10 Аня
    10 Боря
    20 Вера
    50 Гена
    50 Дина
    
    Ожидаемый вывод
    right shape=(5, 3)
    right nan_title=2
    outer both=3 left_only=2 right_only=2
    outer nan_student=2
    
Решение
Как проверяется решение

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

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