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

如何统计DataFrame中指定邮件地址的出现次数?

如何统计指定邮件列表在DataFrame中的出现次数?

嗨,我来帮你搞定这个问题!首先明确说一句:优先用pandas的内置矢量化方法,循环不仅代码写起来麻烦,数据量大的时候运行效率会差很多。下面一步步给你演示最优解法,也会补充循环的正确写法(如果你确实需要的话)。

第一步:准备示例数据

先把你的DataFrame和目标列表还原出来:

import pandas as pd

# 构造你的示例DataFrame
data = {
    'From': ['person1@gmail.com', 'person2@gmail.com', 'person3@gmail.com'],
    'To': ['stranger1@gmail.com', 'stranger1@gmail.com, stranger2@gmail.com', 'person1@gmail.com, stranger2@gmail.com']
}
df = pd.DataFrame(data)

# 指定需要统计的邮箱列表
lst = ['person1@gmail.com', 'stranger2@gmail.com', 'person3@gmail.com']

第二步:用pandas内置方法实现统计

核心思路是把所有涉及的邮箱(From列 + 拆分后的To列)合并成一个序列,然后统计次数再过滤目标列表:

# 1. 拆分To列中用逗号分隔的邮箱,展开成单独的行
to_emails = df['To'].str.split(', ', expand=True).stack().reset_index(drop=True)

# 2. 把From列和处理后的To列合并成一个包含所有邮箱的序列
all_emails = pd.concat([df['From'], to_emails], ignore_index=True)

# 3. 统计每个邮箱的出现次数
email_counts = all_emails.value_counts()

# 4. 按照目标列表过滤并整理成你需要的格式
result = email_counts.reindex(lst).reset_index()
result.columns = ['list_item', 'Total_Count']

# 查看结果
print(result)

运行后会得到你期望的输出:

list_item  Total_Count
0  person1@gmail.com            2
1  stranger2@gmail.com          2
2  person3@gmail.com            1

如果你一定要用循环实现

你的原循环有语法错误(比如if To,From contains item in emails:是不符合Python语法的),下面是修正后的循环写法:

from collections import defaultdict

# 用字典来存计数
count_dict = defaultdict(int)

# 遍历DataFrame的每一行
for _, row in df.iterrows():
    # 处理From列的邮箱,如果在目标列表里就计数+1
    from_email = row['From']
    if from_email in lst:
        count_dict[from_email] += 1
    
    # 拆分To列的邮箱,逐个检查计数
    to_emails = row['To'].split(', ')
    for email in to_emails:
        if email in lst:
            count_dict[email] += 1

# 转换成你需要的DataFrame格式
result_df = pd.DataFrame({
    'list_item': lst,
    'Total_Count': [count_dict[item] for item in lst]
})

不过还是强烈建议用第一种pandas内置方法,尤其是当你的DataFrame行数很多的时候,矢量化操作的速度会比循环快几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:29