merge и concat: соединение таблиц с контролем кардинальности
Содержание курса
Склад и поставки: три типа join, indicator и concat за один проход
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinцелое числоp— количество строк таблицы товаров. - Читает следующие
pстрок; каждая содержит два токена через пробел:item_id(целое число) иstock(целое число). Создаётpd.DataFrameс именемitemsи столбцами'item_id','stock'. - Читает целое число
s— количество строк таблицы поставок. - Читает следующие
sстрок; каждая содержит два токена через пробел:item_id(целое число) иsupply(целое число). Создаётpd.DataFrameс именемsuppliesи столбцами'item_id','supply'. - Шаг A. inner join. Выполняет
pd.merge(items, supplies, on='item_id', how='inner'). Выводит одну строку:inner shape=<shape>. - Шаг B. left join. Выполняет
pd.merge(items, supplies, on='item_id', how='left'). Выводит одну строку:left nan_supply=<k>, где<k>— число NaN в столбце'supply'. - Шаг 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'. - Шаг D. concat. Читает целое число
e— количество строк дополнительных товаров. Читает следующиеeстрок; каждая содержит два токена:item_id(целое число) иstock(целое число). Создаётpd.DataFrameextraс теми же столбцами. Объединяет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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
