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

如何利用datetime.timedelta按Days列扩展DataFrame的日期行?

按日期范围扩展DataFrame行的实现方法

原始DataFrame

Id;TnbId;Date_Start;Days
468;18;2023-08-26;8
101;15;2023-08-11;1
97;18;2023-08-01;18
1618;18;2023-08-07;12
96;15;2023-08-04;1
..;..;...-..-..;..

期望结果

Id;TnbId;Date_Start;Days
468;18;2023-08-26;8
468;18;2023-08-27;8
468;18;2023-08-28;8
468;18;2023-08-29;8
468;18;2023-08-30;8
468;18;2023-08-31;8
468;18;2023-09-01;8
101;15;2023-08-11;1
...;..;....-..-..

实现方法

利用pandas的日期序列生成和行展开功能即可完成,具体代码如下:

import pandas as pd

# 读取分号分隔的原始数据
df = pd.read_csv('your_data_source.csv', sep=';')

# 将日期列转为datetime类型,方便后续运算
df['Date_Start'] = pd.to_datetime(df['Date_Start'])

# 为每行生成对应天数的连续日期序列
df['Date_Start'] = df.apply(
    lambda row: pd.date_range(start=row['Date_Start'], periods=row['Days']),
    axis=1
)

# 将日期序列展开为独立行,重置索引
df = df.explode('Date_Start').reset_index(drop=True)

# 可选:将日期转回原始字符串格式
df['Date_Start'] = df['Date_Start'].dt.strftime('%Y-%m-%d')

# 输出结果(按分号分隔)
print(df.to_csv(sep=';', index=False))

逻辑说明

  1. 先把Date_Start转为datetime类型,是日期运算的前提
  2. 用pd.date_range按每行的Days值,生成从Date_Start开始的连续日期列表
  3. 通过explode将列表中的每个日期拆成单独行,其他列(Id、TnbId、Days)保持与原行的对应关系
  4. 最后可按需将日期转回原始的字符串格式,匹配输入数据样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:29:56