pandasВременные рядыEasyБесплатно~7 мин

shift/diff: WoW и MoM рост в %

// Условие

Таблица df — уже агрегированная: одна строка на неделю, 26 недель (январь–июнь 2024).

Что нужно
Добавь в df две новые колонки:
  • wow_pct — изменение выручки относительно прошлой недели в %, округлено до 2 знаков;
  • mom_pct — изменение относительно 4 недель назад (≈ месяц) в %, округлено до 2 знаков.
Первая строка wow_pct будет NaN, первые 4 строки mom_pct — NaN (не заполняй их нулями).

Верни в result DataFrame с колонками week, revenue, wow_pct, mom_pct. Порядок строк — без изменений.

// Данные

df: week (datetime, понедельник), revenue (float) — 26 строк, отсортировано по дате
▶ Решить в pandas-тренажёре

// Решение

Подсказка

shift(1) сдвигает Series на 1 строку вниз — то есть в каждой строке ты видишь значение предыдущей строки. Это и есть «прошлая неделя».

Формула WoW: (revenue - revenue.shift(1)) / revenue.shift(1) * 100. Для MoM — то же самое, но shift(4).

Присвой оба выражения как новые колонки: result['wow_pct'] = (...).round(2). Потом верни result с 4 колонками.

Сначала попробуй сам → Показать решение
df = load_data()

result = df.copy()
result['wow_pct'] = ((result['revenue'] - result['revenue'].shift(1)) / result['revenue'].shift(1) * 100).round(2)
result['mom_pct'] = ((result['revenue'] - result['revenue'].shift(4)) / result['revenue'].shift(4) * 100).round(2)

print(result.head(10))
shift(n) = сдвиг на n строк вниз (тебе нужно «прошлое» — оно выше в отсортированной по времени таблице). Альтернатива для одного периода: pct_change() — встроенная функция, делает то же, что shift(1): df['revenue'].pct_change() * 100. Но shift(n) универсальнее — поддерживает любые периоды и удобен для кастомных формул (например, (curr - prev) / prev.abs() чтобы избежать деления на 0 при отрицательных значениях).

// Похожие задачи