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

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

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

Склад и поставки: три типа join, indicator и concat за один проход

Что уже дано

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

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

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

  1. Читает из stdin целое число p — количество строк таблицы товаров.
  2. Читает следующие p строк; каждая содержит два токена через пробел: item_id (целое число) и stock (целое число). Создаёт pd.DataFrame с именем items и столбцами 'item_id', 'stock'.
  3. Читает целое число s — количество строк таблицы поставок.
  4. Читает следующие s строк; каждая содержит два токена через пробел: item_id (целое число) и supply (целое число). Создаёт pd.DataFrame с именем supplies и столбцами 'item_id', 'supply'.
  5. Шаг A. inner join. Выполняет pd.merge(items, supplies, on='item_id', how='inner'). Выводит одну строку: inner shape=<shape>.
  6. Шаг B. left join. Выполняет pd.merge(items, supplies, on='item_id', how='left'). Выводит одну строку: left nan_supply=<k>, где <k> — число NaN в столбце 'supply'.
  7. Шаг C. outer join с indicator. Выполняет pd.merge(items, supplies, on='item_id', how='outer', indicator=True). Выводит одну строку: outer left_only=<a> right_only=<b> both=<c>, где <a>, <b>, <c> — число строк с соответствующим значением '_merge'.
  8. Шаг D. concat. Читает целое число e — количество строк дополнительных товаров. Читает следующие e строк; каждая содержит два токена: item_id (целое число) и stock (целое число). Создаёт pd.DataFrame extra с теми же столбцами. Объединяет items и extra через pd.concat([items, extra], ignore_index=True). Выводит одну строку: concat shape=<shape>.

Ввод и вывод

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

Ограничения: p >= 1, s >= 1.

Формат ввода

p
item_id stock
...
s
item_id supply
...
e
item_id stock
...

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

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

inner shape=(<r>, <c>)
left nan_supply=<k>
outer left_only=<a> right_only=<b> both=<c>
concat shape=(<r>, <c>)
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    4
    10 50
    20 30
    30 80
    40 15
    3
    10 5
    20 8
    50 12
    2
    60 25
    70 40
    
    Ожидаемый вывод
    inner shape=(2, 3)
    left nan_supply=2
    outer left_only=2 right_only=1 both=2
    concat shape=(6, 2)
    
Решение
Как проверяется решение

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

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