Bird
Raised Fist0
Pandasdata~5 mins

Duplicates on specific columns in Pandas

Choose your learning style10 modes available
Introduction

Finding duplicates on specific columns helps you spot repeated information in just those parts of your data. This is useful to clean or analyze data more accurately.

You want to check if customers have multiple orders with the same product.
You need to find repeated entries based on email addresses in a contact list.
You want to remove duplicate rows that share the same date and location in event data.
You want to count how many times a specific combination of columns appears in your dataset.
Syntax
Pandas
DataFrame.duplicated(subset=[column_names], keep='first')

subset lets you pick which columns to check for duplicates.

keep controls which duplicates to mark: 'first' keeps the first occurrence, 'last' keeps the last, and False marks all duplicates.

Examples
Find duplicates based on the 'email' column, marking all but the first occurrence as duplicates.
Pandas
df.duplicated(subset=['email'])
Mark all rows that have duplicate combinations of 'date' and 'location', including the first occurrences.
Pandas
df.duplicated(subset=['date', 'location'], keep=False)
Mark duplicates based on 'product_id', but keep the last occurrence as not duplicate.
Pandas
df.duplicated(subset=['product_id'], keep='last')
Sample Program

This code creates a small table of orders. It checks for repeated orders by the same customer for the same product. It adds a new column showing which rows are duplicates (True) and which are not (False).

Pandas
import pandas as pd

data = {
    'order_id': [1, 2, 3, 4, 5, 6],
    'customer': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Charlie'],
    'product': ['Book', 'Pen', 'Book', 'Pen', 'Notebook', 'Book']
}
df = pd.DataFrame(data)

# Find duplicates based on 'customer' and 'product' columns
duplicates = df.duplicated(subset=['customer', 'product'], keep='first')

# Show the original data with a new column marking duplicates
df['is_duplicate'] = duplicates
print(df)
OutputSuccess
Important Notes

Duplicates are checked row by row based on the selected columns only.

Setting keep=False marks all duplicates as True, including the first occurrence.

You can use the boolean result to filter or remove duplicates easily.

Summary

Use duplicated() with subset to find duplicates on specific columns.

The keep parameter controls which duplicates are marked.

This helps clean or analyze data where only some columns matter for duplication.

Practice

(1/5)
1. What does the subset parameter do in the duplicated() method in pandas?
easy
A. It specifies which columns to check for duplicates.
B. It removes duplicates from the DataFrame.
C. It sorts the DataFrame before checking duplicates.
D. It changes the data type of columns before checking duplicates.

Solution

  1. Step 1: Understand the purpose of duplicated()

    The duplicated() method identifies duplicate rows in a DataFrame.
  2. Step 2: Role of subset parameter

    The subset parameter limits the duplicate check to specific columns instead of all columns.
  3. Final Answer:

    It specifies which columns to check for duplicates. -> Option A
  4. Quick Check:

    subset = columns to check duplicates [OK]
Hint: Use subset to focus duplicate check on chosen columns [OK]
Common Mistakes:
  • Thinking subset removes duplicates
  • Confusing subset with sorting
  • Assuming subset changes data types
2. Which of the following is the correct syntax to find duplicates based on columns 'A' and 'B' in a pandas DataFrame df?
easy
A. df.duplicated(subset=['A', 'B'])
B. df.duplicates(columns=['A', 'B'])
C. df.duplicated(columns=['A', 'B'])
D. df.find_duplicates(['A', 'B'])

Solution

  1. Step 1: Recall pandas method for duplicates

    The correct method is duplicated() to find duplicate rows.
  2. Step 2: Correct use of subset parameter

    The subset parameter takes a list of column names to check duplicates on.
  3. Final Answer:

    df.duplicated(subset=['A', 'B']) -> Option A
  4. Quick Check:

    Correct method and subset syntax [OK]
Hint: Use duplicated(subset=[...]) to specify columns [OK]
Common Mistakes:
  • Using non-existent methods like duplicates()
  • Passing columns instead of subset
  • Wrong method names like find_duplicates()
3. Given the DataFrame:
import pandas as pd
data = {'A': [1, 2, 1, 3], 'B': [4, 5, 4, 6], 'C': [7, 8, 9, 10]}
df = pd.DataFrame(data)
print(df.duplicated(subset=['A', 'B']))

What is the output?
medium
A. [False, True, False, False]
B. [True, False, True, False]
C. [False, False, True, False]
D. [False, False, False, True]

Solution

  1. Step 1: Understand the DataFrame and subset

    The DataFrame has rows with columns A and B: (1,4), (2,5), (1,4), (3,6).
  2. Step 2: Identify duplicates on columns 'A' and 'B'

    The third row (index 2) duplicates the first row (index 0) on columns A and B.
  3. Final Answer:

    [False, False, True, False] -> Option C
  4. Quick Check:

    Only third row is duplicate on A and B [OK]
Hint: Check repeated (A,B) pairs for True in duplicated() output [OK]
Common Mistakes:
  • Assuming duplicates on all columns
  • Marking first occurrence as duplicate
  • Confusing index positions
4. You run this code:
df.duplicated(subset=['A', 'B'], keep='last')

but get unexpected results. What is a common mistake causing this?
medium
A. Forgetting to pass a list to subset causes an error.
B. Using keep='last' marks the last occurrence as False, others as True.
C. Using keep='last' marks the first duplicates as True, not the last.
D. The duplicated() method does not accept keep parameter.

Solution

  1. Step 1: Understand keep parameter behavior

    keep='last' marks all duplicates except the last occurrence as True.
  2. Step 2: Identify common confusion

    Many expect it to mark the last duplicate as True, but it actually keeps the last as False (not duplicate).
  3. Final Answer:

    Using keep='last' marks the last occurrence as False, others as True. -> Option B
  4. Quick Check:

    keep='last' keeps last duplicate False [OK]
Hint: Remember keep='last' keeps last duplicate False, others True [OK]
Common Mistakes:
  • Thinking keep='last' marks last duplicate True
  • Passing subset as string instead of list
  • Believing duplicated() lacks keep parameter
5. You have a DataFrame df with columns 'Name', 'Age', 'City'. You want to remove rows where 'Name' and 'City' are duplicates but keep the first occurrence. Which code correctly does this?
hard
A. df[~df.duplicated(subset=['Name', 'City'], keep='first')]
B. df = df.duplicated(subset=['Name', 'City'], keep='first')
C. df = df.drop_duplicates(columns=['Name', 'City'], keep='last')
D. df = df.drop_duplicates(subset=['Name', 'City'], keep='first')

Solution

  1. Step 1: Identify method to remove duplicates

    Use drop_duplicates() to remove duplicate rows.
  2. Step 2: Use subset and keep parameters correctly

    Pass subset=['Name', 'City'] and keep='first' to keep first occurrence and remove others.
  3. Step 3: Check options

    df = df.drop_duplicates(subset=['Name', 'City'], keep='first') uses correct method and parameters. df[~df.duplicated(subset=['Name', 'City'], keep='first')] uses duplicated() with negation but does not assign back to df. df = df.drop_duplicates(columns=['Name', 'City'], keep='last') uses wrong parameter name. df = df.duplicated(subset=['Name', 'City'], keep='first') returns boolean Series, not DataFrame.
  4. Final Answer:

    df = df.drop_duplicates(subset=['Name', 'City'], keep='first') -> Option D
  5. Quick Check:

    drop_duplicates with subset and keep='first' removes duplicates [OK]
Hint: Use drop_duplicates(subset=[...], keep='first') to remove duplicates [OK]
Common Mistakes:
  • Using duplicated() instead of drop_duplicates() to remove rows
  • Passing columns instead of subset
  • Not assigning result back to df
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard