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

基于两列过滤Pandas DataFrame:筛选跨年度唯一邮箱记录

Pandas筛选跨年份存在的邮箱记录

给定如下初始DataFrame:

import pandas as pd

df_current = pd.DataFrame({
    'Email': ['Bob_Jones@gmail.com', 'Mike_Smith@gmail.com', 'Mike_Smith@gmail.com', 'Bob_Jones@gmail.com'],
    'Tickets Sold': [1, 2, 1, 1], 
    'Year': ['2022', '2023', '2023', '2023']
})

需要筛选出同时在2022和2023年都有记录的邮箱,并保留这些邮箱的所有原始记录,最终得到目标DataFrame:

df_desired = pd.DataFrame({
    'Email': ['Bob_Jones@gmail.com', 'Bob_Jones@gmail.com'],
    'Tickets Sold': [1, 1], 
    'Year': ['2022', '2023']
})

实现方法

方法一:分组验证年份集合

通过分组邮箱,检查每个邮箱的年份是否同时包含2022和2023:

# 获取符合条件的邮箱列表
valid_emails = (
    df_current.groupby('Email')['Year']
    .apply(lambda years: {'2022', '2023'}.issubset(years))
    .loc[lambda x: x]  # 筛选出结果为True的邮箱
    .index
)

# 过滤原DataFrame
df_desired = df_current[df_current['Email'].isin(valid_emails)]

方法二:取两年邮箱的交集

先分别提取2022和2023年的邮箱集合,再取交集进行过滤:

# 提取各年份的唯一邮箱
emails_2022 = df_current[df_current['Year'] == '2022']['Email'].unique()
emails_2023 = df_current[df_current['Year'] == '2023']['Email'].unique()

# 取两个年份都存在的邮箱
valid_emails = set(emails_2022) & set(emails_2023)

# 过滤原DataFrame
df_desired = df_current[df_current['Email'].isin(valid_emails)]

两种方法都能得到目标结果,可根据个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:55:29