Задача курса

pandas merge indicator: right и outer join без потери строк

Курс «NumPy и 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

Ввод
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

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется