duplicated() marks each row that repeats an earlier one with True; drop_duplicates() removes those rows.
subset= chooses which columns decide that two rows are the same. Use it when an ID column makes every row unique, or when one column (like an email) should be unique on its own.
keep= chooses which copy survives: "first" (the default), "last", or False to mark or drop every copy.
Real duplicates are rarely exact. "Arjun.Mehta@example.com" and " arjun.mehta@example.com" are the same person to you but different text to pandas. Clean the column first, signups["email"].str.strip().str.lower(), then check for duplicates on the cleaned values. The text lesson later covers .str methods in depth.
Always count before you drop, so you know how many rows you're removing.