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

Python如何将DataFrame内的日期范围按年度拆分?

日期区间按周年拆分Python实现方案

前置依赖

需要提前安装pandas和python-dateutil库,未安装可执行以下命令:

pip install pandas python-dateutil

完整实现代码

步骤1:导入依赖并构造原始数据

import pandas as pd
from dateutil.relativedelta import relativedelta

# 构造原始DataFrame,实际使用时可替换为自己读取的数据
df = pd.DataFrame({
    'id': ['a1', 'b1'],
    'start': ['2018-03-04', '2019-01-24'],
    'end': ['2020-03-03', '2021-05-08']
})

# 将日期列转换为datetime格式,方便后续计算
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])

步骤2:定义区间拆分函数

def split_by_anniversary(row):
    split_rows = []
    current_start = row["start"]
    original_end = row["end"]
    
    while current_start <= original_end:
        # 计算当前周期的到期日:起始日加1年再减1天
        current_end = current_start + relativedelta(years=1) - relativedelta(days=1)
        # 若计算出的到期日晚于原始结束日期,取原始结束日期
        if current_end > original_end:
            current_end = original_end
        # 保存当前拆分段
        split_rows.append({
            "id": row["id"],
            "start": current_start.strftime("%Y-%m-%d"),
            "end": current_end.strftime("%Y-%m-%d")
        })
        # 更新下一段的起始日
        current_start = current_end + relativedelta(days=1)
    return split_rows

步骤3:应用函数生成结果

# 逐行应用拆分函数,展开后转换为新的DataFrame
split_result = df.apply(split_by_anniversary, axis=1).explode().tolist()
result_df = pd.DataFrame(split_result)

结果验证

打印result_df即可得到和需求完全匹配的输出:

idstartend
a12018-03-042019-03-03
a12019-03-042020-03-03
b12019-01-242020-01-23
b12020-01-242021-01-23
b12021-01-242021-05-08

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:15:03