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

按6月至次年6月的年度日期区间拆分数据集的方法咨询

按自定义年度区间(6月至次年6月)拆分数据集

原始数据集

ID                 date            
        A                 201806
        B                 201809
        C                 201901
        D                 201905
        E                 201906
        F                 202002
        G                 202003
        H                 202004

需求说明

可以按每年6月1日至次年5月31日的自定义年度区间拆分数据集,完全匹配你给出的预期结果。核心是为每条数据标记其所属的自定义年度区间,再按标记分组拆分。

实现方案(以Python Pandas为例)

以下是具体的代码实现步骤:

  1. 加载数据并转换日期格式
    将date列转换为可识别的日期类型,方便后续区间判断:

    import pandas as pd
    
    # 构造原始数据
    data = {
        'ID': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
        'date': ['201806', '201809', '201901', '201905', '201906', '202002', '202003', '202004']
    }
    df = pd.DataFrame(data)
    
    # 转换date列为日期类型,默认取每月第一天
    df['date'] = pd.to_datetime(df['date'], format='%Y%m')
    
  2. 定义自定义年度分组规则
    为每条数据生成所属的年度区间标记:

    • 若日期的月份≥6,属于[当前年份]/[当前年份+1]年度区间(如2018年6月→2018/2019)
    • 若日期的月份<6,属于[当前年份-1]/[当前年份]年度区间(如2019年5月→2018/2019)
    # 计算自定义年度标签
    df['fiscal_year'] = df['date'].apply(
        lambda x: f"{x.year}/{x.year+1}" if x.month >=6 else f"{x.year-1}/{x.year}"
    )
    
  3. 按年度标签拆分数据集
    按生成的fiscal_year列分组,得到拆分后的数据集:

    # 拆分数据
    grouped = df.groupby('fiscal_year')
    
    # 获取第一个区间的数据集(2018/2019)
    df1 = grouped.get_group('2018/2019').drop('fiscal_year', axis=1)
    # 获取第二个区间的数据集(2019/2020)
    df2 = grouped.get_group('2019/2020').drop('fiscal_year', axis=1)
    

验证结果

  • 拆分后的数据集1(对应2018年6月1日至2019年5月31日):
    ID       date
    0  A 2018-06-01
    1  B 2018-09-01
    2  C 2019-01-01
    3  D 2019-05-01
    
  • 拆分后的数据集2(对应2019年6月1日至2020年4月30日):
    ID       date
    4  E 2019-06-01
    5  F 2020-02-01
    6  G 2020-03-01
    7  H 2020-04-01
    

完全匹配你预期的拆分结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:42