pandas rolling: скользящая сумма после сортировки таблицы
Series.rolling(window=w).sum() считает сумму по окну из w последовательных строк. Для целочисленного окна по умолчанию min_periods=w: пока в окне недостаточно непропущенных значений, результат равен NaN.
Сортировка по региону не создаёт группировку
В этой задаче условие требует rolling по всей таблице после сортировки, без groupby. На границе регионов окно может включать строки из разных регионов. Это отличается от скользящей суммы отдельно внутри каждой группы. Следуйте условию, а перед вычислением упорядочьте строки по указанным ключам.
Пример на других данных
import pandas as pd
df = pd.DataFrame({"team": ["A", "A", "B"], "month": [2, 1, 1], "sales": [20, 10, 100]})
df = df.sort_values(["team", "month"]).reset_index(drop=True)
print(df["sales"].tolist())
print(df["sales"].rolling(window=2).sum().tolist())
print(df["sales"].rolling(window=2, min_periods=1).sum().tolist())
Результат:
[10, 20, 100]
[nan, 30.0, 120.0]
[10.0, 30.0, 120.0]
Решите задачу
Ниже — условие и редактор Python с проверкой без регистрации. Пример выше показывает приём на других данных; для задачи соблюдайте её формат ввода и результата. Курс NumPy и pandas помогает пройти темы по порядку.
Скользящая сумма по регионам: сортировка, rolling и NaN-диагностика
Вы получаете таблицу ежемесячных продаж по одному или нескольким регионам. Нужно:
- отсортировать данные по региону и месяцу;
- вычислить скользящую сумму по всему DataFrame (не по группам) с заданным окном;
- подсчитать и вывести количество NaN в результате;
- вывести значения скользящей суммы в порядке сортировки.
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinдва целых числаnиw— количество строк и размер скользящего окна. - Читает следующие
nстрок; каждая содержит три токена через пробел:region(строка без пробелов),month(целое число) иsales(целое число). Строки могут быть в произвольном порядке. - Создаёт
pd.DataFrameсо столбцами'region','month','sales'. - Сортирует DataFrame по
['region', 'month']черезsort_valuesи сбрасывает индекс черезreset_index(drop=True). Сохраняет результат обратно вdf. - Добавляет столбец
'roll_sum'— скользящую сумму'sales'сwindow=wиmin_periodsпо умолчанию (равнымw). - Выводит в
stdoutровно три строки:
- строка 1:
nan_count=<k>— число строк с NaN в'roll_sum'; - строка 2: значения
'roll_sum'через пробел в порядке отсортированного DataFrame; NaN выводится как строкаnan; числовые значения выводятся как целые (без дробной части, например300, а не300.0); - строка 3:
regions=<список регионов>— уникальные значения столбца'region'в отсортированном порядке, через запятую без пробелов (напримерregions=Восток,Запад).
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1, w >= 1.
Формат ввода
n w region1 month1 sales1 region2 month2 sales2 ...
Формат вывода
nan_count=<k>
<roll_sum через пробел, NaN как 'nan', числа целыми>
regions=<регион1,регион2,...>
Пример
- Ввод
6 3 Запад 2 150 Восток 1 100 Запад 1 200 Восток 3 300 Восток 2 400 Запад 3 250
- Вывод
nan_count=2 nan nan 800 900 650 600 regions=Восток,Запад
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- rolling: скользящие агрегаты по упорядоченным данным — задача по NumPy и pandas
- Pandas rolling: minperiods и неполное окно
- pandas rolling: скользящее среднее и размер окна
- Pandas rolling minperiods: сравните два скользящих средних
- pandas rolling: порядок строк, размер окна и NaN
- pandas Series из словаря: index, shape и dtype
