The question
A study report requires known hours and scores. Establish what can be used without changing the incoming table.
df Eligibility reportYour inputs
df
One row is one recorded observation. IDs identify records; dates use YYYY-MM-DD.
Field meanings and units
submission_id- Attendance-submission identifier.
student- Learner label.
group- Comparison group.
hours- Study duration in hours.
score- Assessment score in points.
attended- Whether the learner attended.
date- Calendar date supplied as YYYY-MM-DD text unless the task states it is invalid.
submission_id | student | group | hours | score | attended | date |
|---|---|---|---|---|---|---|
| S001 | Learner 1 | A | 2 | 55 | false | 2026-04-01 |
| S002 | None | B | 5 | 78 | true | 2026-04-01 |
| S003 | Learner 3 | A | None | 68 | true | 2026-04-02 |
| S004 | Learner 4 | B | 7 | 90 | true | 2026-04-02 |
| S005 | Learner 5 | A | 4 | 72 | false | 2026-04-03 |
View all 16 rows
submission_id | student | group | hours | score | attended | date |
|---|---|---|---|---|---|---|
| S001 | Learner 1 | A | 2 | 55 | false | 2026-04-01 |
| S002 | None | B | 5 | 78 | true | 2026-04-01 |
| S003 | Learner 3 | A | None | 68 | true | 2026-04-02 |
| S004 | Learner 4 | B | 7 | 90 | true | 2026-04-02 |
| S005 | Learner 5 | A | 4 | 72 | false | 2026-04-03 |
| S006 | Learner 6 | B | 6 | None | true | 2026-04-03 |
| S007 | Learner 7 | A | 8 | 94 | true | 2026-04-04 |
| S008 | Learner 8 | B | 1 | None | true | 2026-04-04 |
| S009 | Learner 9 | A | 2 | 56 | false | 2026-04-05 |
| S010 | Learner 10 | B | 5 | 79 | true | 2026-04-05 |
| S011 | Learner 11 | A | 3 | 69 | true | 2026-04-06 |
| S012 | Learner 12 | B | 7 | 91 | true | 2026-04-06 |
| S013 | Learner 13 | A | 4 | 73 | false | 2026-04-07 |
| S014 | Learner 14 | B | 6 | 86 | true | 2026-04-07 |
| S015 | Learner 15 | A | 8 | 95 | true | 2026-04-08 |
| S016 | Learner 16 | B | 1 | 50 | true | 2026-04-08 |
The editable setup in Your Python creates these inputs when you run it.
A study report requires known hours and scores. Establish what can be used without changing the incoming table.
missingSerieseligibleDataFrameexcluded_countnumberDeliverables
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
- missing
- no value was supplied
- eligible
- rows that meet this task’s stated conditions
- Required-field gapsOutput
missingSeries- Store the missing-value count for each of
hoursand score in missing.
- Store the missing-value count for each of
- Eligible recordsOutput
eligibleDataFrame- Create
eligiblecontaining all columns for records with bothhoursandscoreknown, in original order.
- Create
- Excluded recordsOutput
excluded_countnumber- Store the number excluded in
excluded_count.
- Store the number excluded in
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
Do gaps in unrelated columns matter for this report?
Hint 2 — Tools
isna(), notna(), sum() and boolean selection
Revisit: Find missing values · Combine conditions
Hint 3 — Approach
Count gaps in the required fields, retain records complete in both, then compare eligible and original row counts.
Explained solution
Add these lines below # Your work in the editor. The supplied input setup is already there.
missing = df[['hours', 'score']].isna().sum()
eligible = df[df.hours.notna() & df.score.notna()]
excluded_count = len(df) - len(eligible)
eligibleView supplied setup
This code is already at the top of the editor.
import pandas as pd
# Supplied input: df (16 rows)
df = pd.DataFrame(
[
('S001', 'Learner 1', 'A', 2, 55, False, '2026-04-01'),
('S002', None, 'B', 5, 78, True, '2026-04-01'),
('S003', 'Learner 3', 'A', None, 68, True, '2026-04-02'),
('S004', 'Learner 4', 'B', 7, 90, True, '2026-04-02'),
('S005', 'Learner 5', 'A', 4, 72, False, '2026-04-03'),
('S006', 'Learner 6', 'B', 6, None, True, '2026-04-03'),
('S007', 'Learner 7', 'A', 8, 94, True, '2026-04-04'),
('S008', 'Learner 8', 'B', 1, None, True, '2026-04-04'),
('S009', 'Learner 9', 'A', 2, 56, False, '2026-04-05'),
('S010', 'Learner 10', 'B', 5, 79, True, '2026-04-05'),
('S011', 'Learner 11', 'A', 3, 69, True, '2026-04-06'),
('S012', 'Learner 12', 'B', 7, 91, True, '2026-04-06'),
('S013', 'Learner 13', 'A', 4, 73, False, '2026-04-07'),
('S014', 'Learner 14', 'B', 6, 86, True, '2026-04-07'),
('S015', 'Learner 15', 'A', 8, 95, True, '2026-04-08'),
('S016', 'Learner 16', 'B', 1, 50, True, '2026-04-08'),
],
columns=['submission_id', 'student', 'group', 'hours', 'score', 'attended', 'date'],
)Why these steps exist
- Only hours and score determine eligibility. Dropping rows for unrelated gaps would exclude usable learners.
- The difference in row counts documents how much evidence the report loses.
Another valid approach
Two not-missing masks or a required-column missingness mask can identify the same complete records.