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

Pandas如何精确匹配过滤并按组拼接字段生成To/CC新列

Pandas 分组匹配拼接邮箱实现方案

问题修正点

你之前使用的str.contains()是子串模糊匹配,只要字段文本包含目标字符串就会被命中,因此会将Tech Sales - Primary这类包含目标片段但并非完全相等的行误判。要做精确匹配直接使用等值判断== 'Sales - Primary'即可。

实现步骤

  • 按acc_id字段分组,分别计算每个分组下的两类邮箱集合:
    • To列:组内TeamMemRole 精确等于 Sales - Primary的所有邮箱,用逗号拼接
    • CC列:组内其余所有角色对应的邮箱,用逗号拼接
  • 将分组计算得到的邮箱映射合并回原DataFrame
  • 仅保留每个acc_id分组第一行的To、CC值,其余行置空,和你给出的预期效果对齐

完整实现代码

import pandas as pd

# 按acc_id分组,计算每个组的To、CC邮箱串
def agg_group_mail(group_df):
    to_mails = group_df.loc[group_df['TeamMemRole'] == 'Sales - Primary', 'email']
    cc_mails = group_df.loc[group_df['TeamMemRole'] != 'Sales - Primary', 'email']
    return pd.Series({
        'To': ','.join(to_mails),
        'CC': ','.join(cc_mails)
    })

# 生成分组邮箱映射表
mail_mapping = df.groupby('acc_id').apply(agg_group_mail).reset_index()

# 将映射结果合并回原DataFrame
df = df.merge(mail_mapping, on='acc_id', how='left')

# 每个acc_id分组仅第一行保留To、CC值,其余行清空
df.loc[df.duplicated(subset='acc_id', keep='first'), ['To', 'CC']] = ''

运行代码后得到的结果和预期完全一致,不会出现角色误匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:12:17