Skip to learning content

DATA SCIENCE PYTHON PLAYGROUND

Data Foundations

← All challenges
WC04 · Café / orders · ~10–15 min

Repeated order exports

record identity · retention · validation

Deduplicated orders

The question

Remove repeated uploads while retaining legitimate repeat purchases.

df Deduplicated orders

Your inputs

df

order_id identifies a real purchase. Different IDs remain separate purchases even when other fields match.

Field meanings and units
order_id
Order or order-line identifier, as defined by this brief.
drink
Recorded drink label.
size
Recorded serving size.
price
Price in dollars; unparseable text needs the stated policy.
tip
Tip in dollars.
shift
AM or PM service period.
date
Calendar date supplied as YYYY-MM-DD text unless the task states it is invalid.
df · first 5 of 16 rows
order_iddrinksizepricetipshiftdate
C001" Latte "Small4.50AM2026-04-01
C002teaLarge2.81PM2026-04-01
C003LATTESmall4.50.5AM2026-04-02
C004" Mocha"Large5.2NoneAM2026-04-02
C005" Latte "Small4.50PM2026-04-03
View all 16 rows
df · complete input
order_iddrinksizepricetipshiftdate
C001" Latte "Small4.50AM2026-04-01
C002teaLarge2.81PM2026-04-01
C003LATTESmall4.50.5AM2026-04-02
C004" Mocha"Large5.2NoneAM2026-04-02
C005" Latte "Small4.50PM2026-04-03
C006teaLarge2.81AM2026-04-03
C007LATTESmall4.50.5AM2026-04-04
C008" Mocha"Large5.2NonePM2026-04-04
C009" Latte "Small4.50AM2026-04-05
C010teaLarge2.81AM2026-04-05
C011LATTESmall4.50.5PM2026-04-06
C012" Mocha"Large5.2NoneAM2026-04-06
C013" Latte "Small4.50AM2026-04-07
C003LATTESmall4.50.5AM2026-04-02
C007LATTESmall4.50.5AM2026-04-04
C016" Latte "Small4.50AM2026-04-01

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

Your task · Repeated order exports

Remove repeated uploads while retaining legitimate repeat purchases.

cleanDataFrameremoved_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. Retained ordersOutputcleanDataFrame
    1. Create clean keeping the first occurrence of each order_id, in original order, with all columns.
    2. Repeated IDs are confirmed export duplicates.
  2. Removed copiesOutputremoved_countnumber
    1. Store the number of extra copies removed in removed_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 two similar purchases necessarily describe the same order?

Hint 2 — Tools

drop_duplicates(), copy() and len()

Revisit: Remove duplicates · Protect the original · Find duplicate rows

Hint 3 — Approach

Use the confirmed order identity, retain its first occurrence and count only the extra copies removed.

Explained solution

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

clean = df.drop_duplicates(subset=['order_id'], keep='first').copy()
removed_count = len(df) - len(clean)
clean
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(
    [
        ('C001', ' Latte ', 'Small', 4.5, 0, 'AM', '2026-04-01'),
        ('C002', 'tea', 'Large', 2.8, 1, 'PM', '2026-04-01'),
        ('C003', 'LATTE', 'Small', 4.5, 0.5, 'AM', '2026-04-02'),
        ('C004', ' Mocha', 'Large', 5.2, None, 'AM', '2026-04-02'),
        ('C005', ' Latte ', 'Small', 4.5, 0, 'PM', '2026-04-03'),
        ('C006', 'tea', 'Large', 2.8, 1, 'AM', '2026-04-03'),
        ('C007', 'LATTE', 'Small', 4.5, 0.5, 'AM', '2026-04-04'),
        ('C008', ' Mocha', 'Large', 5.2, None, 'PM', '2026-04-04'),
        ('C009', ' Latte ', 'Small', 4.5, 0, 'AM', '2026-04-05'),
        ('C010', 'tea', 'Large', 2.8, 1, 'AM', '2026-04-05'),
        ('C011', 'LATTE', 'Small', 4.5, 0.5, 'PM', '2026-04-06'),
        ('C012', ' Mocha', 'Large', 5.2, None, 'AM', '2026-04-06'),
        ('C013', ' Latte ', 'Small', 4.5, 0, 'AM', '2026-04-07'),
        ('C003', 'LATTE', 'Small', 4.5, 0.5, 'AM', '2026-04-02'),
        ('C007', 'LATTE', 'Small', 4.5, 0.5, 'AM', '2026-04-04'),
        ('C016', ' Latte ', 'Small', 4.5, 0, 'AM', '2026-04-01'),
    ],
    columns=['order_id', 'drink', 'size', 'price', 'tip', 'shift', 'date'],
)

Why these steps exist

  • Purchase identity is order_id. Similar drinks, prices and dates can still describe separate legitimate purchases.
  • Keeping the first upload removes extra copies without counting an entire repeated group as lost.

Another valid approach

Keeping rows not flagged as later duplicate IDs is equivalent to removing those extra copies.

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.