基于Pandas DataFrame两日期列生成行并保留原索引
解决方法
要实现需求并保留原索引,可以通过pandas的apply结合date_range生成日期序列,再用explode展开行,具体步骤如下:
1. 构造示例DataFrame并转换日期格式
首先把Start Date和End Date转为datetime类型,这是生成日期序列的基础:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'ID': [1, 2], 'Start Date': ['01-01-2015', '01-01-2016'], 'End Date': ['09-08-2022', '05-10-2020'] }) # 转换日期列为datetime类型(这里日期格式是DD-MM-YYYY,指定format参数匹配格式) df['Start Date'] = pd.to_datetime(df['Start Date'], format='%d-%m-%Y') df['End Date'] = pd.to_datetime(df['End Date'], format='%d-%m-%Y')
2. 生成包含所有日期的New Date列
对每一行应用pd.date_range生成完整的日期序列,存入New Date列:
# 生成包含起止日期的序列,inclusive='both'确保两端日期都被包含 df['New Date'] = df.apply(lambda x: pd.date_range(start=x['Start Date'], end=x['End Date'], inclusive='both'), axis=1)
3. 展开日期列表并保留原索引
用explode把New Date列的列表拆分成单独行,这一步会自动保留原有的索引、ID等所有列数据:
# 展开日期列,得到目标格式的DataFrame result_df = df.explode('New Date')
执行后,result_df中每一行对应一个日期,原ID、原索引都会保留——比如原索引为0的行(ID=1)会被拆分成从2015-01-01到2022-09-08的所有日期行,每一行的索引都为0。
注意:如果你的日期格式是MM-DD-YYYY,需要把
pd.to_datetime的format参数改成%m-%d-%Y,根据实际格式调整即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

