Python中移除DataFrame多行列内重复值的方法求助
解决DataFrame中单元格内及跨多行的邮件重复值移除问题
问题说明
需要清理邮件数据,实现两个核心目标:
- 移除单个单元格内的重复邮件地址
- 移除跨多行重复出现的邮件地址(仅保留首次出现的邮件)
示例数据构造
先还原你的原始数据:
import pandas as pd data = { 'left': ['One', 'Two', 'Three'], 'center': [ 'email1emailcom email2emailcom email3emailcom', 'email1emailcom email15emailcom email12emailcom', 'email15emailcom email16emailcom' ] } df = pd.DataFrame(data)
解决方案代码
# 初始化全局集合,记录已出现的邮件 seen_emails = set() def clean_emails(cell): # 拆分单元格为邮件列表,先移除单元格内的重复值(保持原有顺序) emails = list(dict.fromkeys(cell.split())) # 过滤掉已在全局出现过的邮件 new_emails = [email for email in emails if email not in seen_emails] # 更新全局已出现集合,避免后续行重复保留 seen_emails.update(new_emails) # 合并为空格分隔的字符串返回 return ' '.join(new_emails) # 将清理逻辑批量应用到center列 df['center'] = df['center'].apply(clean_emails)
代码解释
- 全局集合
seen_emails:全程跟踪所有已保留的邮件地址,确保跨多行的重复值仅保留首次出现的条目。 clean_emails函数:- 按空格拆分单元格内容为邮件列表,用
dict.fromkeys()快速移除单元格内的重复值,同时保留原始顺序。 - 过滤掉已在全局集合中的邮件,只保留未出现过的新邮件。
- 将新保留的邮件加入全局集合,避免后续行重复处理。
- 把过滤后的列表重新合并为空格分隔的字符串,还原单元格格式。
- 按空格拆分单元格内容为邮件列表,用
apply方法:将清理逻辑批量作用于center列的每个单元格,完成全量数据处理。
处理后结果
运行代码后,df的输出与你期望的结果完全一致:
| left | center |
|---|---|
| One | email1emailcom email2emailcom email3emailcom |
| Two | email15emailcom email12emailcom |
| Three | email16emailcom |
内容的提问来源于stack exchange,提问作者Vokult
相关产品推荐
相关产品推荐

