Real Python + pandas in your browser, same Meridian data as the SQL practice. All seven tables are pre-loaded as DataFrames. Assign your answer to result; use print() to explore (output appears under “stdout”). The first run downloads the runtime; later runs are instant. The Python ladder currently mirrors chapters 1–2; more comes after the SQL ladder settles.
Tables and columns (as of 31 Aug 2026)
- accounts · Customer companies
account_id, account_name, industry, region, tier, created_date
- customers · Contacts at accounts
customer_id, account_id, full_name, role, email
- deals · One row per opportunity; stage is the current CRM value
deal_id, account_id, owner, stage, amount, source, created_date, closed_date
- deal_stage_history · Append-only log of stage transitions
history_id, deal_id, stage, entered_at
- transactions · Money movements against closed_won deals
transaction_id, deal_id, amount, transaction_date, type
- pipeline_runs · Daily run log for 3 pipelines (Apr–Aug 2026)
run_id, pipeline, run_date, started_at, finished_at, status, rows_in, rows_out
- dashboard_views · Usage events for the legacy and new dashboards
view_id, dashboard, viewer_id, viewer_role, viewed_at
How many deals are there?
Warm-updeals is a DataFrame. Set result to the number of rows in it.
Why this matters for a data product
len() on a DataFrame is COUNT(*). Knowing the row count is the sanity check before any other number.
Related: Python & pandas 101: the formulas