Ravindra BagaleCourses & study guides मराठी Track your progress

25. How to Rank and Running Totals in pandas (rank, cumsum, window)

25.5 Light Windows: rolling and expanding

Why. “Last 3 days average orders” smooths one crazy Diwali spike so Solapur is not punished for one quiet Monday.

What.

  • rolling(n) — window of the last n rows (after sort).
  • expanding() — from the start through the current row (growing window).
  • Use .mean(), .sum(), .median() on the window.

How.

3-day rolling mean

  1. Day-level series sorted by date.
  2. df["orders_roll3"] = df["orders"].rolling(3).mean().
  3. Expect first two rows as NaN if window needs 3 points (default).
  4. Optional: min_periods=1 if you want early days filled.
  5. Compare rolling mean vs raw spike before you call a city “down”.

Worked example A — Rolling vs expanding.

import pandas as pd

s = pd.DataFrame({
    "order_date": pd.to_datetime(
        ["2026-10-20", "2026-10-21", "2026-10-22", "2026-10-23", "2026-10-24"]
    ),
    "orders": [400, 420, 410, 900, 880],  # Thu spike
})
s = s.sort_values("order_date")
s["roll3"] = s["orders"].rolling(3).mean()
s["expand_mean"] = s["orders"].expanding().mean()
print(s)

Worked example B — Rolling inside each city.

d = pd.DataFrame({
    "city": ["Pune"] * 4 + ["Nashik"] * 4,
    "day": list(range(1, 5)) * 2,
    "orders": [100, 110, 105, 200, 40, 42, 41, 90],
})
d["roll3"] = d.groupby("city")["orders"].transform(
    lambda x: x.rolling(3).mean()
)
print(d)

Worked example C — When not to use rolling.

Rani has only two days of Kolhapur data. A rolling(7) is empty almost everywhere — use expanding or wait for more days.

Ravindra Bagale's Tip

Rolling = rear-view mirror last N days. Expanding = “season so far”. Spike ekta rolling mean ni shant hoto.