You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码解释

  1. 全局集合seen_emails:全程跟踪所有已保留的邮件地址,确保跨多行的重复值仅保留首次出现的条目。
  2. clean_emails函数:
    • 按空格拆分单元格内容为邮件列表,用dict.fromkeys()快速移除单元格内的重复值,同时保留原始顺序。
    • 过滤掉已在全局集合中的邮件,只保留未出现过的新邮件。
    • 将新保留的邮件加入全局集合,避免后续行重复处理。
    • 把过滤后的列表重新合并为空格分隔的字符串,还原单元格格式。
  3. apply方法:将清理逻辑批量作用于center列的每个单元格,完成全量数据处理。

处理后结果

运行代码后,df的输出与你期望的结果完全一致:

leftcenter
Oneemail1emailcom email2emailcom email3emailcom
Twoemail15emailcom email12emailcom
Threeemail16emailcom

内容的提问来源于stack exchange,提问作者Vokult

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:23:17