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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:35:25