如何使用Pandas按类别过滤指定日期之前的数据?
需求说明
原始数据表格:
col-1 col-2 A Day-1 A Day-2 A Day-4 A Day-5 B Day-1 B Day-2 B Day-3 B Day-6 B Day-7
需要借助以下pd.Series作为每个类别的截止日期:
A Day-1 B Day-6
处理后需保留每个类别中截止日期及之前的数据,最终结果如下:
col-1 col-2 A Day-1 B Day-1 B Day-2 B Day-3 B Day-6
请问如何用Pandas实现该需求?
实现方案
完全可以实现,具体操作如下:
准备数据
先将原始数据转为DataFrame,截止日期转为以类别名为索引的Series:import pandas as pd # 原始数据 df = pd.DataFrame({ 'col-1': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'col-2': ['Day-1', 'Day-2', 'Day-4', 'Day-5', 'Day-1', 'Day-2', 'Day-3', 'Day-6', 'Day-7'] }) # 截止日期Series cutoff_series = pd.Series(['Day-1', 'Day-6'], index=['A', 'B'], name='cutoff')匹配截止日期
通过col-1字段,将每个类别的截止日期匹配到原始数据的对应行:df = df.merge(cutoff_series, left_on='col-1', right_index=True)提取日期数值并筛选
从日期字符串中提取数字部分,转为整数后,筛选出每个类别中日期数字小于等于截止日期数字的行:# 提取日期中的数字 df['day_num'] = df['col-2'].str.extract(r'Day-(\d+)').astype(int) df['cutoff_num'] = df['cutoff'].str.extract(r'Day-(\d+)').astype(int) # 筛选符合条件的数据 result = df[df['day_num'] <= df['cutoff_num']][['col-1', 'col-2']]查看最终结果
输出result即可得到目标表格:col-1 col-2 0 A Day-1 4 B Day-1 5 B Day-2 6 B Day-3 7 B Day-6
如果你的日期格式包含更复杂的时间信息(如年月),可以先将col-2转换为datetime类型后再进行比较,核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者JohnTroy
相关产品推荐
相关产品推荐

