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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:10:50