如何使用Pandas筛选出包含指定年份列表中任意年份记录的事件全量数据
筛选符合年份条件的事件完整记录
需求说明
我们有一份事件与对应年份的数据集,需要筛选出至少在指定年份列表(示例为[2012, 2013])中有一条记录的事件的所有数据——也就是说,只要某个事件在目标年份里有过记录,它的所有年份记录都要保留,不管其他年份是否在目标列表中。
原始数据集
| Event | Year |
|---|---|
| Event 1 | 2012 |
| Event 1 | 2013 |
| Event 1 | 2014 |
| Event 1 | 2015 |
| Event 2 | 2012 |
| Event 2 | 2013 |
| Event 3 | 2014 |
| Event 3 | 2015 |
| Event 3 | 2014 |
| Event 4 | 2012 |
| Event 4 | 2015 |
| Event 5 | 2013 |
筛选后结果
按照需求处理后,最终保留的数据如下:
| Event | Year |
|---|---|
| Event 1 | 2012 |
| Event 1 | 2013 |
| Event 1 | 2014 |
| Event 1 | 2015 |
| Event 2 | 2012 |
| Event 2 | 2013 |
| Event 4 | 2012 |
| Event 4 | 2015 |
| Event 5 | 2013 |
实现示例
1. SQL 实现
如果你的数据存储在数据库中,可以用子查询先找出符合条件的事件,再关联获取全部记录:
SELECT ed.* FROM event_data ed INNER JOIN ( -- 先筛选出在目标年份有记录的事件 SELECT DISTINCT Event FROM event_data WHERE Year IN (2012, 2013) ) eligible ON ed.Event = eligible.Event;
2. Python Pandas 实现
如果用Python处理数据,可以通过两步筛选完成:
import pandas as pd # 构造原始数据(实际场景可从文件读取) data = pd.DataFrame({ 'Event': ['Event 1', 'Event 1', 'Event 1', 'Event 1', 'Event 2', 'Event 2', 'Event 3', 'Event 3', 'Event 3', 'Event 4', 'Event 4', 'Event 5'], 'Year': [2012, 2013, 2014, 2015, 2012, 2013, 2014, 2015, 2014, 2012, 2015, 2013] }) # 指定目标年份列表 target_years = [2012, 2013] # 第一步:找出所有符合条件的事件 eligible_events = data[data['Year'].isin(target_years)]['Event'].unique() # 第二步:获取这些事件的全部记录 result = data[data['Event'].isin(eligible_events)] # 打印结果 print(result)
内容的提问来源于stack exchange,提问作者Prime coder
相关产品推荐
相关产品推荐

