pandas groupby и agg: именованные агрегаты и сортировка
groupby объединяет строки по ключам, а agg вычисляет показатели для каждой группы. В именованной агрегации название результата задаётся слева, а пара (столбец, функция) — справа. as_index=False оставляет ключи обычными столбцами.
Короткий пример
import pandas as pd
df = pd.DataFrame({"team": ["A", "A", "B"], "score": [3, 5, 2]})
report = df.groupby("team", as_index=False).agg(
total=("score", "sum"), average=("score", "mean"))
report = report.sort_values("total", ascending=False)
print(report.to_dict("records"))
Результат:
[{'team': 'A', 'total': 8, 'average': 4.0}, {'team': 'B', 'total': 2, 'average': 2.0}]
После агрегации одна строка означает группу, а не исходное наблюдение. Сортировка по значению агрегата выполняется отдельно; порядок ключей группировки сам по себе не ранжирует полученные суммы.
Попробуйте самостоятельно
Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.
Пайплайн: groupby + agg + rename + sort, затем группировка по двум ключам
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит четыре токена через пробел:month(строка без пробелов),category(строка без пробелов),amount(целое число),transactions(целое число). Пример строки:Jan Food 1200 12. - Создаёт
pd.DataFrameиз словаря списков с ключами'month','category','amount','transactions'. - Шаг A. Группирует DataFrame по
'month'сas_index=Falseи вычисляет за один вызовaggтри именованных агрегата:month_total=('amount', 'sum'),month_avg=('amount', 'mean'),month_tx=('transactions', 'sum'). Сохраняет вmonthly. - Шаг B. Переименовывает столбец
'month_total'в'total'черезrename(columns=...)и сохраняет результат обратно вmonthly. - Шаг C. Сортирует
monthlyпо'total'по возрастанию черезsort_values. Выводит строкуmonthly_columns=<список>—list(monthly.columns), затем для каждой строки отсортированногоmonthlyвыводит одну строку вида<month> <total> <round(month_avg, 1)> <month_tx>. - Шаг D. Группирует исходный DataFrame по
['month', 'category']сas_index=Falseи вычисляетcat_total=('amount', 'sum'). Сохраняет вby_cat. Сортируетby_catпо'month', затем по'category'. Выводит строкуby_cat_columns=<список>, затем для каждой строки выводит<month> <category> <cat_total>.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1.
Формат ввода
n month1 category1 amount1 transactions1 month2 category2 amount2 transactions2 ...
Формат вывода
monthly_columns=['month', 'total', 'month_avg', 'month_tx']
<month> <total> <month_avg> <month_tx>
...
by_cat_columns=['month', 'category', 'cat_total']
<month> <category> <cat_total>
...
Пример
- Ввод
8 Jan Food 1200 12 Jan Tech 3500 5 Feb Food 900 9 Feb Tech 4200 6 Jan Food 800 8 Feb Food 650 7 Jan Tech 2000 3 Feb Tech 1500 4
- Вывод
monthly_columns=['month', 'total', 'month_avg', 'month_tx'] Feb 7250 1812.5 26 Jan 7500 1875.0 28 by_cat_columns=['month', 'category', 'cat_total'] Feb Food 1550 Feb Tech 5700 Jan Food 2000 Jan Tech 5500
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- groupby и agg: сводные показатели с явными именами агрегатов — задача по NumPy и pandas
- pandas groupby и agg: группировка по двум столбцам
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
- Загрузка CSV в pandas: dtype, usecols и разбор дат
