
Assemble a monthly revenue report from three separate tables — cleaning, joining, and ranking your way to the numbers leadership asked for.
You're a senior analyst at Marketly, an online marketplace. Leadership wants the monthly revenue report, but nothing is in one place: orders.csv, customers.csv, and products.csv each hold a piece. Some orders have a blank status; some reference products that aren't in the catalog. Your job is to clean it, join it correctly, and deliver revenue by category and the top spenders.
Seven steps, ~3 hours. What you'll practice: missing-data handling, merging tables, NumPy arithmetic, filtering, grouping & aggregating, and ranking. This is the Module 2 capstone.
You'll practice
The report's data lives in three files in your workspace. Load each into its own DataFrame — orders, customers, products. The variable names matter; every later step builds on them.
Done when: all three DataFrames exist — orders (22 rows), customers (8), products (6).
orders.csv (22 rows) — order_id · customer_id · product_id · quantity (int) · status (some blank)
customers.csv (8 rows) — customer_id · customer_name · country
products.csv (6 rows) — product_id · product_name · category · price (float)
Two orders reference a product_id that isn't in the catalog. Three orders have a blank status.