Skip to learning content

DATA SCIENCE PYTHON PLAYGROUND

Data Foundations

← All challenges
IC03 · Student attendance / study · ~10–15 min

Can this report use the data?

missingness · population · validation

Eligibility report

The question

A study report requires known hours and scores. Establish what can be used without changing the incoming table.

df Eligibility report

Your 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.
df · first 5 of 16 rows
submission_idstudentgrouphoursscoreattendeddate
S001Learner 1A255false2026-04-01
S002NoneB578true2026-04-01
S003Learner 3ANone68true2026-04-02
S004Learner 4B790true2026-04-02
S005Learner 5A472false2026-04-03
View all 16 rows
df · complete input
submission_idstudentgrouphoursscoreattendeddate
S001Learner 1A255false2026-04-01
S002NoneB578true2026-04-01
S003Learner 3ANone68true2026-04-02
S004Learner 4B790true2026-04-02
S005Learner 5A472false2026-04-03
S006Learner 6B6Nonetrue2026-04-03
S007Learner 7A894true2026-04-04
S008Learner 8B1Nonetrue2026-04-04
S009Learner 9A256false2026-04-05
S010Learner 10B579true2026-04-05
S011Learner 11A369true2026-04-06
S012Learner 12B791true2026-04-06
S013Learner 13A473false2026-04-07
S014Learner 14B686true2026-04-07
S015Learner 15A895true2026-04-08
S016Learner 16B150true2026-04-08

The editable setup in Your Python creates these inputs when you run it.

Your task · Can this report use the data?

A study report requires known hours and scores. Establish what can be used without changing the incoming table.

missingSerieseligibleDataFrameexcluded_countnumber

Deliverables

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
  1. Required-field gapsOutputmissingSeries
    1. Store the missing-value count for each of hours and score in missing.
  2. Eligible recordsOutputeligibleDataFrame
    1. Create eligible containing all columns for records with both hours and score known, in original order.
  3. Excluded recordsOutputexcluded_countnumber
    1. Store the number excluded in excluded_count.

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)
eligible
View 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.

Tab: indent · Shift+Tab: outdent · Esc, then Tab: leave editor

Edit Python. Control or Command plus Enter runs it. Tab indents by four spaces. Shift plus Tab outdents. Press Escape, then Tab or Shift plus Tab to leave the editor.

Each run executes all editor code in a fresh Python session. Named outputs appear below when you run.

Python starts when you open a lesson.

Output

Run your code to see what Python returns.