The request

From Megan Collins, Head of Sales
Your goal
Using order lines with quantity > 0 from orders with status 'completed' placed in 2025, compute each order's value and attach the customer's segment. Set result to this text, with the numbers computed in code: "Business accounts placed {A} of 2025's completed orders but brought {B} of revenue. Their median order was ${C}, against ${D} for consumers, so losing one business account costs as much as losing several consumers." A and B are the business shares of orders and of revenue as whole percents (f-string format :.0%), C and D the business and consumer median order values with thousands separators and no decimals (format :,.0f).
- Use the
customersDataFramenot done yet - Use the
ordersDataFramenot done yet - Store a text value (str) in
resultnot done yet
Your code
Loading the editor…
Reference solution
| customer_id | first_name | last_name | city | |
|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle |
Mote checks your result
Press Run. Each row that matches the goal becomes a firefly in your lantern.
What Megan gets, and why
DataFrames
Loaded for you as pandas DataFrames, plus pd and np.
customers2,018 rows · 9 columns
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NaN |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NaN |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NaN |
orders12,000 rows · 7 columns
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NaN |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NaN |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 rows · 6 columns
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
products120 rows · 8 columns
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NaN | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
returns1,673 rows · 5 columns
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 rows · 8 columns
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NaN | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 rows · 7 columns
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NaN | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NaN | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NaN | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NaN | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 rows · 3 columns
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
The lesson
What, how much, so what
A takeaway that a manager can act on has three parts:
| Part | Answers | Example |
|---|---|---|
| What | What is the main result? | Business accounts bring a large share of revenue |
| How much | Which number backs it? | 26% of orders, 52% of revenue |
| So what | What does it mean for a decision? | Losing one hurts as much as losing several consumers |
Without “how much” it’s a description of a chart. Without “so what” it’s a fact nobody can use. Compare “The chart shows revenue by segment. Business is high.” with “Business accounts placed 26% of 2025’s completed orders but brought 52% of revenue.” The second one can be acted on.
Compute the numbers, never copy them
Every number in a takeaway should come from code that runs right before it, formatted by an f-string. Then a re-run with new data updates the sentence too, and nobody has to retype 52% from a chart.
order_share = is_b.mean() # 0.2638 → "26%"
f"{order_share:.0%}" # '26%'
f"{706.9:,.0f}" # '707'
f"{1200321.6:,.0f}" # '1,200,322'
:.0% multiplies by 100, rounds to whole percents and adds the sign. :,.0f adds thousands
separators. Printing the sentence (print(result)) shows it exactly as the reader will see it.
Writing it in a notebook
In a notebook, the takeaway goes in a Markdown cell under the chart, not in a code comment.
Markdown is plain text with light markup: # for a title, ## for a section, **bold** for the
key numbers, - for a bullet list, and a table with a |---|---| line under its header. Give every
question its own heading, then code, chart and takeaway in that order. Put all imports in the first
cell and check the notebook with Restart & Run All: if it fails from top to bottom, it isn’t
done.
Other kinds of takeaways
- A decision about the data: what you decided, why, and its impact. “We kept the 370 outlier orders: they’re real business purchases, and dropping them would remove a large share of revenue.”
- A correlation: strength, direction, the word “associated”, and what’s not related.
- A recommendation: an action verb, a concrete place, the number behind it. “Give business accounts a named contact: they bring 52% of revenue from 26% of orders.”
Common mistakes
- Describing the chart (“the chart shows…”) instead of stating the finding.
- Rounding by hand or pasting numbers from a chart.
- Leaving out the denominator: “52% of revenue” of what, in which year?
- Writing “causes” for a correlation, or giving a recommendation without the number behind it.
Lantern lit!
Practised: takeawayconclusionsf stringspercent formatreporting
- Solved
- No hints
- First run
