以下是 SQL 和 Pandas 解决方案:
SQL 解决方案
使用 DELETE
语句删除重复的邮箱,仅保留 id
最小的记录:
DELETE p1 FROM Person p1
JOIN Person p2
ON p1.email = p2.email AND p1.id > p2.id;
解释:
p1
和p2
是Person
表的两个别名,p1
代表要删除的行,p2
代表要保留的行。ON p1.email = p2.email
确保比较相同的邮箱。AND p1.id > p2.id
确保p1
只删除比p2
ID 大的记录,即保留 ID 最小的记录。
Pandas 解决方案
直接修改 Person
数据框,删除重复邮箱:
import pandas as pd
# 假设已给定 DataFrame
# Person = pd.DataFrame({'id': [...], 'email': [...]})
Person.sort_values(by="id", inplace=True) # 先按 id 升序排列
Person.drop_duplicates(subset="email", keep="first", inplace=True) # 删除重复项,只保留最小 id
解释:
sort_values(by="id", inplace=True)
: 先按id
升序排序,以确保最小id
在前。drop_duplicates(subset="email", keep="first", inplace=True)
: 只保留第一个出现的邮箱,删除后续重复项。
这样可以正确删除重复邮箱,仅保留最小 id
的记录。