Выборка столбцов и строк: [], loc и iloc без цепочной индексации
Содержание курса
Найди и исправь: три ошибки в булевой фильтрации и присваивании через loc
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
- Условие для
mask_bigиспользуетdf['amount'] >= 200, хотя по условию нужно отобрать строки, гдеamountстрого больше200. - Условие для
mask_paid_northкомбинирует два условия через|(или), хотя по условию нужны строки, где одновременноstatus == 'paid'иregion == 'Север'— то есть нужен&. - Присваивание
df['status'][mask_small] = 'archived'— цепочная индексация, ненадёжная в любом режиме pandas. Нужно заменить на один вызовdf.loc[mask_small, 'status'] = 'archived'.
Что нужно сделать
Найдите и исправьте все три ошибки так, чтобы программа:
- Читала из
stdinцелое числоn— количество строк таблицы. - Читала следующие
nстрок; каждая содержит четыре токена через пробел:order_id(целое),amount(вещественное),status(строка),region(строка). Пример:101 250.0 paid Север. - Строила
pd.DataFrameиз словаря списков с ключами'order_id','amount','status','region'. - Строила маску
mask_big = df['amount'] > 200(строго больше) и выводила строку:big_count=<число строк>. - Строила маску
mask_paid_north = (df['status'] == 'paid') & (df['region'] == 'Север')и выводила через пробел значенияorder_idотфильтрованных строк:paid_north_ids=<id1> <id2> .... - Строила маску
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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
