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

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

25.7 Practice, Tip and Close

Why. Rank + cumsum + one rolling mean should feel boring before interview day.

What. One lab on fictional Maharashtra delivered orders.

How.

Chapter practice lab

  1. Build a DataFrame of ≥12 delivered orders across Pune, Nashik, Kolhapur, Solapur with dates 20–24 Oct 2026 and amounts.
  2. Add global dense rank on amount_inr and city dense rank.
  3. Build a daily GMV table; add running GMV overall and per city.
  4. Add a 3-day rolling mean of daily orders (statewide).
  5. Export outputs/rank_cumsum_lab.csv for the order-level ranks (index=False).
  6. Write three WhatsApp lines: top order, Pune running GMV on 24 Oct, rolling mean vs raw spike day.
from pathlib import Path
import pandas as pd

Path("outputs").mkdir(exist_ok=True)
orders = pd.DataFrame({
    "order_id": [f"BLK-{i}" for i in range(1, 13)],
    "city": ["Pune", "Pune", "Nashik", "Kolhapur", "Solapur", "Pune",
             "Nashik", "Pune", "Nagpur", "Kolhapur", "Solapur", "Pune"],
    "order_date": pd.to_datetime(
        ["2026-10-20"] * 3 + ["2026-10-21"] * 3 + ["2026-10-22"] * 2
        + ["2026-10-23"] * 2 + ["2026-10-24"] * 2
    ),
    "amount_inr": [90, 210, 95, 180, 70, 220, 110, 150, 200, 340, 80, 210],
})
orders["rank_global"] = orders["amount_inr"].rank(ascending=False, method="dense")
orders["rank_city"] = (
    orders.groupby("city")["amount_inr"].rank(ascending=False, method="dense")
)
orders.to_csv("outputs/rank_cumsum_lab.csv", index=False)

daily = (
    orders.groupby("order_date", as_index=False)["amount_inr"]
    .sum()
    .rename(columns={"amount_inr": "gmv"})
    .sort_values("order_date")
)
daily["gmv_running"] = daily["gmv"].cumsum()
daily["gmv_roll3"] = daily["gmv"].rolling(3).mean()
print(orders.head())
print(daily)

Practice task

Amir: “Only Pune + Nashik. City rank 1 rows. Also city running GMV by date.” Print both tables. No ML.

Ravindra Bagale's Tip

Rank = position. Cumsum = so far. Rolling = last N days. Sort ne vismaru naka. Samajla ka?

Thodkyaat sangaycha tar (quick recap)

  • Rank labels ties; pick dense / min / average on purpose
  • Cumsum needs correct sort order
  • Groupby for within-city rank and running totals
  • Rolling = fixed window; expanding = growing window
  • Check grain (day vs order) before rolling
  • Export ranks as new columns; keep raw amounts

Samajla ka? Aata leaderboard ani running GMV pandas madhe clear yenar — pudhe ek chhote lab / day.