如何利用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))
逻辑说明
- 先把
Date_Start转为datetime类型,是日期运算的前提 - 用
pd.date_range按每行的Days值,生成从Date_Start开始的连续日期列表 - 通过
explode将列表中的每个日期拆成单独行,其他列(Id、TnbId、Days)保持与原行的对应关系 - 最后可按需将日期转回原始的字符串格式,匹配输入数据样式
内容的提问来源于stack exchange,提问作者benek
相关产品推荐
相关产品推荐

