The question
Prepare usable sales lines and their monetary totals.
df Sales totalsYour inputs
df
quantity is units; unit_price is dollars per unit. All valid quantities and prices are nonnegative.
Field meanings and units
order_id- Order or order-line identifier, as defined by this brief.
product- Recorded product label.
category- Product category.
region- Sales region.
quantity- Number of units.
unit_price- Dollars per unit.
discount- Discount in dollars for the whole order line.
in_stock- Whether the order line is marked available.
order_id | product | category | region | quantity | unit_price | discount | in_stock |
|---|---|---|---|---|---|---|---|
| P001 | " Notebook " | Paper | East | 2 | 3.5 | 0 | false |
| P002 | PEN | Writing | West | 5 | 1.2 | None | true |
| P003 | " pencil" | Writing | East | 3 | 0.8 | 0.5 | true |
| P004 | Note-book | Paper | West | bad | 3.5 | 1 | true |
| P005 | " Notebook " | Paper | East | 1 | 3.5 | 0 | true |
View all 16 rows
order_id | product | category | region | quantity | unit_price | discount | in_stock |
|---|---|---|---|---|---|---|---|
| P001 | " Notebook " | Paper | East | 2 | 3.5 | 0 | false |
| P002 | PEN | Writing | West | 5 | 1.2 | None | true |
| P003 | " pencil" | Writing | East | 3 | 0.8 | 0.5 | true |
| P004 | Note-book | Paper | West | bad | 3.5 | 1 | true |
| P005 | " Notebook " | Paper | East | 1 | 3.5 | 0 | true |
| P006 | PEN | Writing | West | 6 | 1.2 | None | false |
| P007 | " pencil" | Writing | East | 2 | 0.8 | 0.5 | true |
| P008 | Note-book | Paper | West | 8 | None | 1 | true |
| P009 | " Notebook " | Paper | East | 2 | 3.5 | 0 | true |
| P010 | PEN | Writing | West | 5 | 1.2 | None | true |
| P011 | " pencil" | Writing | East | 3 | 0.8 | 0.5 | false |
| P012 | Note-book | Paper | West | 4 | 3.5 | 1 | true |
| P013 | " Notebook " | Paper | East | 1 | 3.5 | 0 | true |
| P014 | PEN | Writing | West | 6 | 1.2 | None | true |
| P015 | " pencil" | Writing | East | 2 | 0.8 | 0.5 | true |
| P016 | Note-book | Paper | West | 8 | 3.5 | 1 | false |
The editable setup in Your Python creates these inputs when you run it.
Prepare usable sales lines and their monetary totals.
cleanDataFrametotal_salesnumberDeliverables
Make the outputs listed below. Use each name exactly as shown. Then choose Check answer.
Python name key
Teal outlines name table columns. Violet left rules name Python objects. Dotted rules mark syntax, functions and parameters. Use each name exactly as shown.
Words in this task
- eligible
- rows that meet this task’s stated conditions
- Priced order linesOutput
cleanDataFrame- Create
cleanby parsingquantityandunit_pricenumerically, excluding rows where either is unknown. - Add
line_total=quantity×unit_price. - Keep other columns and source order.
- Create
- Total salesOutput
total_salesnumber- Store the sum of eligible
line_totalvalues intotal_sales.
- Store the sum of eligible
Data policy Keep all supplied source tables unchanged. Work on separate outputs.
Help Hints & explained solution
Choose the amount of help you need. Opening one hint does not reveal the others.
Hint 1 — Think
Which quantities are additive money amounts, and which are unit prices?
Hint 2 — Tools
to_numeric(), dropna(), arithmetic and sum()
Revisit: Convert numeric text · Drop missing rows · Create a numeric column
Hint 3 — Approach
Parse the two required measures, retain complete lines, calculate each line amount and total those amounts.
Explained solution
Add these lines below # Your work in the editor. The supplied input setup is already there.
clean = df.copy()
clean['quantity'] = pd.to_numeric(clean.quantity, errors='coerce')
clean['unit_price'] = pd.to_numeric(clean.unit_price, errors='coerce')
clean = clean.dropna(subset=['quantity', 'unit_price']).copy()
clean['line_total'] = clean.quantity * clean.unit_price
total_sales = clean.line_total.sum()
cleanView supplied setup
This code is already at the top of the editor.
import pandas as pd
# Supplied input: df (16 rows)
df = pd.DataFrame(
[
('P001', ' Notebook ', 'Paper', 'East', '2', '3.5', 0, False),
('P002', 'PEN', 'Writing', 'West', '5', '1.2', None, True),
('P003', ' pencil', 'Writing', 'East', '3', '0.8', 0.5, True),
('P004', 'Note-book', 'Paper', 'West', 'bad', '3.5', 1, True),
('P005', ' Notebook ', 'Paper', 'East', '1', '3.5', 0, True),
('P006', 'PEN', 'Writing', 'West', '6', '1.2', None, False),
('P007', ' pencil', 'Writing', 'East', '2', '0.8', 0.5, True),
('P008', 'Note-book', 'Paper', 'West', '8', None, 1, True),
('P009', ' Notebook ', 'Paper', 'East', '2', '3.5', 0, True),
('P010', 'PEN', 'Writing', 'West', '5', '1.2', None, True),
('P011', ' pencil', 'Writing', 'East', '3', '0.8', 0.5, False),
('P012', 'Note-book', 'Paper', 'West', '4', '3.5', 1, True),
('P013', ' Notebook ', 'Paper', 'East', '1', '3.5', 0, True),
('P014', 'PEN', 'Writing', 'West', '6', '1.2', None, True),
('P015', ' pencil', 'Writing', 'East', '2', '0.8', 0.5, True),
('P016', 'Note-book', 'Paper', 'West', '8', '3.5', 1, False),
],
columns=['order_id', 'product', 'category', 'region', 'quantity', 'unit_price', 'discount', 'in_stock'],
)Why these steps exist
- Quantity and unit price must both be numeric before multiplication is meaningful.
- Line amounts are additive dollars; summing unit prices would not measure sales.
Another valid approach
Direct column arithmetic and assign-based construction both produce the same line totals.