pandas: устройство, выборка и изменение таблиц

Выборка столбцов и строк: [], loc и iloc без цепочной индексации

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

Найди и исправь: три ошибки в булевой фильтрации и присваивании через loc

Что уже дано

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

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

  1. Условие для mask_big использует df['amount'] >= 200, хотя по условию нужно отобрать строки, где amount строго больше 200.
  2. Условие для mask_paid_north комбинирует два условия через | (или), хотя по условию нужны строки, где одновременно status == 'paid' и region == 'Север' — то есть нужен &.
  3. Присваивание df['status'][mask_small] = 'archived' — цепочная индексация, ненадёжная в любом режиме pandas. Нужно заменить на один вызов df.loc[mask_small, 'status'] = 'archived'.

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

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

  1. Читала из stdin целое число n — количество строк таблицы.
  2. Читала следующие n строк; каждая содержит четыре токена через пробел: order_id (целое), amount (вещественное), status (строка), region (строка). Пример: 101 250.0 paid Север.
  3. Строила pd.DataFrame из словаря списков с ключами 'order_id', 'amount', 'status', 'region'.
  4. Строила маску mask_big = df['amount'] > 200 (строго больше) и выводила строку: big_count=<число строк>.
  5. Строила маску mask_paid_north = (df['status'] == 'paid') & (df['region'] == 'Север') и выводила через пробел значения order_id отфильтрованных строк: paid_north_ids=<id1> <id2> ....
  6. Строила маску mask_small = df['amount'] <= 100 и выполняла одним вызовом df.loc[mask_small, 'status'] = 'archived'. Выводила значения столбца 'status' через пробел: statuses=<s1> <s2> ....

Ввод и вывод

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

Формат ввода

n
order_id1 amount1 status1 region1
...
order_idN amountN statusN regionN

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

big_count=<число>
paid_north_ids=<id1> <id2> ...
statuses=<s1> <s2> ...
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    6
    101 250.0 paid Север
    102 80.5 pending Юг
    103 320.0 paid Север
    104 45.0 cancelled Восток
    105 500.0 paid Юг
    106 200.0 pending Север
    
    Ожидаемый вывод
    big_count=3
    paid_north_ids=101 103
    statuses=paid archived paid archived paid pending
    
Решение
Как проверяется решение

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

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