Skip to learning content

DATA SCIENCE PYTHON PLAYGROUND

Data Foundations

← All challenges
IC02 · Delivery / logistics · ~10–15 min

Prepare a focused extract

selection · ordering · handoff

Focused extract

The question

The East depot needs a list of completed deliveries, longest first.

df Focused extract

Your inputs

df

One row is one delivery. The handoff is for completed East-depot records only; durations are minutes.

Field meanings and units
delivery_id
Delivery identifier.
depot
Depot responsible for the delivery.
status
Recorded delivery state.
minutes
Elapsed duration in minutes; unknown is not zero.
weight_kg
Weight in kilograms.
date
Calendar date supplied as YYYY-MM-DD text unless the task states it is invalid.
df · first 5 of 18 rows
delivery_iddepotstatusminutesweight_kgdate
D001EastDelivered321.22026-04-01
D002WestDelivered481.92026-04-01
D003NorthPending252.62026-04-02
D004EastReturned613.32026-04-02
D005WestDelivered4542026-04-03
View all 18 rows
df · complete input
delivery_iddepotstatusminutesweight_kgdate
D001EastDelivered321.22026-04-01
D002WestDelivered481.92026-04-01
D003NorthPending252.62026-04-02
D004EastReturned613.32026-04-02
D005WestDelivered4542026-04-03
D006NorthDelivered371.22026-04-03
D007EastPending721.92026-04-04
D008WestReturned292.62026-04-04
D009NorthDelivered333.32026-04-05
D010EastDelivered4942026-04-05
D011WestPending261.22026-04-06
D012NorthReturned621.92026-04-06
D013EastDelivered462.62026-04-07
D014WestDelivered383.32026-04-07
D015NorthPending7342026-04-08
D016EastReturned301.22026-04-08
D017WestDelivered341.92026-04-09
D018NorthDelivered502.62026-04-09

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

Your task · Prepare a focused extract

The East depot needs a list of completed deliveries, longest first.

extractDataFramerecord_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.

  1. Depot handoffOutputextractDataFrame
    1. Create extract for depot East and status Delivered.
    2. Keep delivery_id, minutes and weight_kg, ordered by minutes descending then delivery_id ascending.
  2. Record countOutputrecord_countnumber
    1. Store the number of selected records in record_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

Which conditions must a record satisfy at the same time?

Hint 2 — Tools

loc, boolean conditions and sort_values()

Revisit: Pick several columns · Combine conditions · Sort the table

Hint 3 — Approach

Select the specified depot and completed status, retain the requested fields, then order the handoff and count it.

Explained solution

Add these lines below # Your work in the editor. The supplied input setup is already there.

extract = df.loc[
    (df.depot == 'East') & (df.status == 'Delivered'),
    ['delivery_id', 'minutes', 'weight_kg'],
].sort_values(['minutes', 'delivery_id'], ascending=[False, True])
record_count = len(extract)
extract
View supplied setup

This code is already at the top of the editor.

import pandas as pd

# Supplied input: df (18 rows)
df = pd.DataFrame(
    [
        ('D001', 'East', 'Delivered', 32, 1.2, '2026-04-01'),
        ('D002', 'West', 'Delivered', 48, 1.9, '2026-04-01'),
        ('D003', 'North', 'Pending', 25, 2.6, '2026-04-02'),
        ('D004', 'East', 'Returned', 61, 3.3, '2026-04-02'),
        ('D005', 'West', 'Delivered', 45, 4, '2026-04-03'),
        ('D006', 'North', 'Delivered', 37, 1.2, '2026-04-03'),
        ('D007', 'East', 'Pending', 72, 1.9, '2026-04-04'),
        ('D008', 'West', 'Returned', 29, 2.6, '2026-04-04'),
        ('D009', 'North', 'Delivered', 33, 3.3, '2026-04-05'),
        ('D010', 'East', 'Delivered', 49, 4, '2026-04-05'),
        ('D011', 'West', 'Pending', 26, 1.2, '2026-04-06'),
        ('D012', 'North', 'Returned', 62, 1.9, '2026-04-06'),
        ('D013', 'East', 'Delivered', 46, 2.6, '2026-04-07'),
        ('D014', 'West', 'Delivered', 38, 3.3, '2026-04-07'),
        ('D015', 'North', 'Pending', 73, 4, '2026-04-08'),
        ('D016', 'East', 'Returned', 30, 1.2, '2026-04-08'),
        ('D017', 'West', 'Delivered', 34, 1.9, '2026-04-09'),
        ('D018', 'North', 'Delivered', 50, 2.6, '2026-04-09'),
    ],
    columns=['delivery_id', 'depot', 'status', 'minutes', 'weight_kg', 'date'],
)

Why these steps exist

  • Both conditions must hold on the same record; accepting either would include unrelated deliveries.
  • The secondary ID order makes ties reproducible without changing the longest-first requirement.

Another valid approach

A boolean mask with column selection or an equivalent query can select the same records. The tie-break and final order still matter.

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.