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

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

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

Найди и исправь: три ошибки в pd.merge (how, indicator, pd.concat)

Что уже дано

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

В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:

  1. Шаг A: pd.merge(base, updates, on='sku', how='inner') — используется inner, хотя нужно сохранить все строки левого DataFrame и добавить данные из правого там, где есть совпадение (how='left').
  2. Шаг B: pd.merge(base, updates, on='sku', how='outer') вызывается без indicator=True, хотя нужно добавить столбец '_merge' для диагностики происхождения строк.
  3. Шаг C: pd.concat([base, extra]) вызывается без ignore_index=True, хотя нужно получить сброшенный RangeIndex.

Каждая ошибка находится в отдельной строке кода. Исправьте все три.

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

Исправьте три ошибки так, чтобы программа:

  1. Читала из stdin целое число b — количество строк базовой таблицы склада.
  2. Читала следующие b строк; каждая содержит два токена через пробел: sku (целое число) и qty (целое число). Создавала pd.DataFrame с именем base и столбцами 'sku', 'qty'.
  3. Читала целое число u — количество строк таблицы обновлений.
  4. Читала следующие u строк; каждая содержит два токена через пробел: sku (целое число) и new_qty (целое число). Создавала pd.DataFrame с именем updates и столбцами 'sku', 'new_qty'.
  5. Шаг 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.
  6. Шаг B. outer join с indicator. Выполняла pd.merge(base, updates, on='sku', how='outer', indicator=True). Выводила одну строку: both=<a> left_only=<b> right_only=<c> — число строк с соответствующим значением '_merge'.
  7. Читала целое число e — количество строк дополнительных записей.
  8. Читала следующие e строк; каждая содержит два токена: sku (целое число) и qty (целое число). Создавала pd.DataFrame extra с теми же столбцами 'sku', 'qty'.
  9. Шаг 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)
  • Тест 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 секунд.

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