merge и concat: соединение таблиц с контролем кардинальности
Содержание курса
Суффиксы и validate: merge двух таблиц с общим столбцом-не-ключом
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая работает с двумя таблицами: складом (warehouse) и поставщиком (supplier). Обе таблицы содержат столбец rating (помимо ключа), поэтому при merge появятся суффиксы.
- Читает из
stdinцелое числоw— количество строк таблицы склада. - Читает следующие
wстрок; каждая содержит три токена через пробел:item_id(целое число),stock(целое число),rating(вещественное число). Создаётpd.DataFrameс именемwarehouseи столбцами'item_id','stock','rating'. - Читает целое число
s— количество строк таблицы поставщика. - Читает следующие
sстрок; каждая содержит три токена через пробел:item_id(целое число),supply(целое число),rating(вещественное число). Создаётpd.DataFrameс именемsupplierи столбцами'item_id','supply','rating'. - Шаг A. outer join с явными суффиксами. Выполняет:
merged = pd.merge(warehouse, supplier, on='item_id', how='outer',
suffixes=('_wh', '_sup'))
Выводит одну строку: cols=<список имён столбцов> — list(merged.columns) как строку Python.
Затем выводит: nan_supply=<k> — число NaN в столбце 'supply'.
Затем выводит: nan_rating_sup=<k> — число NaN в столбце 'rating_sup'.
6. Шаг B. validate='one_to_one' — ожидаемая ошибка. Выполняет merge с теми же параметрами плюс validate='one_to_one' внутри try/except и при поимке pd.errors.MergeError выводит строку: validate=error.
7. Шаг C. validate='one_to_many' — успешное соединение. Выполняет inner join тех же таблиц с validate='one_to_many' и suffixes=('_wh', '_sup'). Выводит одну строку: validate=ok shape=<shape>.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: w >= 1, s >= 1.
Формат ввода
w item_id stock rating ... s item_id supply rating ...
Гарантируется:
- ключ
item_idуникален в таблицеwarehouse(one side); - в таблице
supplierхотя бы одинitem_idвстречается более одного раза (many side), поэтомуvalidate='one_to_one'обязан выброситьMergeError; - хотя бы один
item_idизwarehouseотсутствует вsupplier(порождает NaN вsupplyиrating_supпри outer join); - хотя бы один
item_idизsupplierотсутствует вwarehouse(порождает NaN вstockиrating_wh).
Формат вывода
Ровно пять строк:
cols=<list>
nan_supply=<k>
nan_rating_sup=<k>
validate=error
validate=ok shape=(<r>, <c>)
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
3 1 100 4.5 2 200 3.8 3 150 4.0 4 1 50 4.2 2 80 3.5 2 60 3.9 5 90 4.7
Ожидаемый выводcols=['item_id', 'stock', 'rating_wh', 'supply', 'rating_sup'] nan_supply=1 nan_rating_sup=1 validate=error validate=ok shape=(3, 5)
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
