merge и concat: соединение таблиц с контролем кардинальности
Содержание курса
Найди и исправь: три ошибки в pd.merge (how, indicator, pd.concat)
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
- Шаг A:
pd.merge(base, updates, on='sku', how='inner')— используетсяinner, хотя нужно сохранить все строки левого DataFrame и добавить данные из правого там, где есть совпадение (how='left'). - Шаг B:
pd.merge(base, updates, on='sku', how='outer')вызывается безindicator=True, хотя нужно добавить столбец'_merge'для диагностики происхождения строк. - Шаг C:
pd.concat([base, extra])вызывается безignore_index=True, хотя нужно получить сброшенный RangeIndex.
Каждая ошибка находится в отдельной строке кода. Исправьте все три.
Что нужно сделать
Исправьте три ошибки так, чтобы программа:
- Читала из
stdinцелое числоb— количество строк базовой таблицы склада. - Читала следующие
bстрок; каждая содержит два токена через пробел:sku(целое число) иqty(целое число). Создавалаpd.DataFrameс именемbaseи столбцами'sku','qty'. - Читала целое число
u— количество строк таблицы обновлений. - Читала следующие
uстрок; каждая содержит два токена через пробел:sku(целое число) иnew_qty(целое число). Создавалаpd.DataFrameс именемupdatesи столбцами'sku','new_qty'. - Шаг A. left join. Выполняла
pd.merge(base, updates, on='sku', how='left'). Выводила одну строку:left shape=<shape>иleft nan=<k>, где<k>— число NaN в столбце'new_qty'. Формат:left shape=(r, c) nan=k. - Шаг B. outer join с indicator. Выполняла
pd.merge(base, updates, on='sku', how='outer', indicator=True). Выводила одну строку:both=<a> left_only=<b> right_only=<c>— число строк с соответствующим значением'_merge'. - Читала целое число
e— количество строк дополнительных записей. - Читала следующие
eстрок; каждая содержит два токена:sku(целое число) иqty(целое число). Создавалаpd.DataFrameextraс теми же столбцами'sku','qty'. - Шаг C. concat с ignore_index. Выполняла
pd.concat([base, extra], ignore_index=True). Выводила одну строку:concat shape=<shape> index_start=<first> index_end=<last>, где<first>и<last>— первый и последний элементы индекса результата.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: b >= 1, u >= 1.
Формат ввода
b sku qty ... u sku new_qty ... e sku qty ...
Формат вывода
Ровно три строки:
left shape=(r, c) nan=k
both=a left_only=b right_only=c
concat shape=(r, c) index_start=0 index_end=last
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
4 10 100 20 200 30 300 40 400 3 10 110 20 220 50 500 2 60 600 70 700
Ожидаемый выводleft shape=(4, 3) nan=2 both=2 left_only=2 right_only=1 concat shape=(6, 2) index_start=0 index_end=5
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
