groupby и transform: групповые признаки на уровне строк и фильтрация групп
Содержание курса
Найди и исправь: agg вместо transform и неверный порог фильтрации
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
- Столбец
'cat_total'вычисляется черезdf.groupby('category')['value'].agg('sum')— ноaggвозвращает Series с индексом из меток групп, поэтому при присваивании вdf['cat_total']все значения станутNaN. Нужно заменитьaggнаtransform. - Маска
maskстроится какdf['cat_total'] >= threshold, хотя по условию нужно отбирать строки, где суммарное значение категории строго больше порога. Нужно заменить>=на>. - Вывод числа отфильтрованных строк написан как
print(len(df_filtered)), хотя по условию нужно вывести строку видаfiltered: <k>(например,filtered: 3). Нужно исправить наprint(f'filtered: {len(df_filtered)}').
Каждая ошибка находится в отдельной строке кода. Исправьте все три.
Что нужно сделать
Исправьте три ошибки так, чтобы программа:
- Читала из
stdinцелое числоn— количество строк таблицы. - Читала следующие
nстрок; каждая содержит три токена через пробел:category(строка без пробелов),item(строка без пробелов),value(целое число). - Создавала
pd.DataFrameс именемdfиз словаря списков с ключами'category','item','value'. - Добавляла столбец
'cat_total'— суммарное значениеvalueпо каждойcategoryдля каждой строки — черезtransform('sum'). - Читала целое число
threshold. - Строила маску
mask = df['cat_total'] > thresholdи создавалаdf_filtered = df.loc[mask]. - Выводила ровно три блока:
- Строку
cat_total: <v1> <v2> ... <vN>— значения столбца'cat_total'в порядке исходных строк через пробел. - Строку
filtered: <k>— число строк вdf_filtered. - Строку
categories: <уникальные категории через пробел>— отсортированный список уникальных значенийcategoryвdf_filtered.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1.
Формат ввода
n category1 item1 value1 ... categoryN itemN valueN threshold
Формат вывода
cat_total: <v1> <v2> ... <vN>
filtered: <k>
categories: <cat1> <cat2> ...
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
5 X Laptop 300 Y Phone 110 X Monitor 300 Y Tablet 110 Z Cable 30 200
Ожидаемый выводcat_total: 600 220 600 220 30 filtered: 4 categories: X Y
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
