Bird
Raised Fist0
Pandasdata~5 mins

Duplicates on specific columns in Pandas - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Duplicates on specific columns
O(n)
Understanding Time Complexity

We want to know how the time needed to find duplicates on certain columns changes as the data grows.

How does the work increase when we have more rows in the table?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 2, 3, 4, 4, 4],
    'B': ['x', 'y', 'y', 'z', 'x', 'x', 'x'],
    'C': [10, 20, 20, 30, 40, 40, 40]
})

duplicates = df.duplicated(subset=['A', 'B'])

This code checks which rows have duplicate values in columns 'A' and 'B'.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: For each row, hashing values in columns 'A' and 'B' to check if seen before.
  • How many times: Once per row.
How Execution Grows With Input

As the number of rows grows, the work to check duplicates grows roughly in proportion to the number of rows.

Input Size (n)Approx. Operations
10About 10 checks
100About 100 checks
1000About 1000 checks

Pattern observation: The number of operations grows roughly in a straight line as rows increase.

Final Time Complexity

Time Complexity: O(n)

This means the time to find duplicates grows directly with the number of rows.

Common Mistake

[X] Wrong: "Finding duplicates on specific columns takes much longer than checking all columns."

[OK] Correct: The operation mainly depends on the number of rows, not how many columns you check, so checking fewer columns does not drastically change the time.

Interview Connect

Understanding how duplicate checks scale helps you explain data cleaning steps clearly and shows you know how data size affects performance.

Self-Check

"What if we checked duplicates on all columns instead of specific ones? How would the time complexity change?"

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