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

如何基于Pandas DataFrame其他列参数生成符合规则的随机邮箱列?

Pandas按行参数生成指定规则随机收件人列表

实现思路

要同时满足「收件人总数量」和「归属域名总数量」两个约束,核心逻辑分三步:

  • 先随机生成指定个数的不重复域名
  • 给每个域名先分配至少1个收件人,保证所有域名都被实际用到,不会出现域名数不足的情况
  • 剩余的收件人随机从已生成的域名中分配,最后打乱列表顺序消除生成规律

扩展后的随机邮箱生成函数

import string
import random
import pandas as pd

def random_email_gen(num_recipients, num_domains):
    num_recipients = int(num_recipients)
    num_domains = int(num_domains)
    # 参数合法性校验
    if num_domains > num_recipients:
        raise ValueError("域名总数不能大于收件人总数,无法满足每个域名至少对应1个收件人")
    
    # 生成指定数量的不重复随机域名
    domains = set()
    while len(domains) < num_domains:
        domain_name = ''.join(random.choice(string.ascii_lowercase) for _ in range(3))
        domains.add(f"{domain_name}.com") # 如需自定义后缀可修改此处
    domains = list(domains)

    emails = []
    # 先给每个域名分配1个收件人,确保所有域名都被使用
    for d in domains:
        username = ''.join(random.choice(string.ascii_lowercase) for _ in range(4))
        emails.append(f"{username}@{d}")
    
    # 分配剩余收件人
    for _ in range(num_recipients - num_domains):
        username = ''.join(random.choice(string.ascii_lowercase) for _ in range(4))
        emails.append(f"{username}@{random.choice(domains)}")
    
    # 打乱顺序消除生成规律
    random.shuffle(emails)
    return emails

给DataFrame新增Recipients列

直接用apply逐行传入两个对应列的参数即可:

# 构建示例数据集
data = {'Date':['19/06/2022', '19/06/2022', '20/06/2022', '20/06/2022', '21/06/2022', '21/06/2022'],
        'Time':['8:25:12', '9:21:33', '18:26:28', '11:39:23', '7:30:47', '20:27:48'],
        'Sender': ['fqqp@abc.com', 'jald@abc.com', 'acpo@abc.com', 'smfa@abc.com', 'jald@abc.com', 'fczz@abc.com'],
        'Number of recipient domains': [2, 3, 3, 4, 3, 5],
        'Number of recipients': [7, 4, 7, 4, 6, 7]
       }
df = pd.DataFrame(data)

# 逐行生成收件人列表
df['Recipients'] = df.apply(
    lambda row: random_email_gen(
        num_recipients=row['Number of recipients'],
        num_domains=row['Number of recipient domains']
    ),
    axis=1
)

效果示例

以第一行为例,传入num_domains=2、num_recipients=7,生成结果类似:

['twku@zpl.com', 'dprs@xmv.com', 'qvfn@zpl.com', 'ryho@xmv.com', 'cwjk@zpl.com', 'aepx@zpl.com', 'ifub@xmv.com']

可以看到仅用到zpl.com、xmv.com2个域名,收件人总数为7,完全符合参数要求。

可自定义调整项

  • 如需多域名后缀(如.pqr、.io、.cn等),可提前定义后缀列表随机选取:
    tld_list = ['.com', '.pqr', '.io', '.cn']
    # 生成域名时改为
    domains.add(f"{domain_name}{random.choice(tld_list)}")
    
  • 如需使用固定域名池而非每行生成随机域名,可将域名生成逻辑移到函数外,把域名列表作为参数传入函数即可
  • 用户名、域名主体的长度直接修改range()内的数值即可调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:48:21