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

如何将pandas DataFrame两列起止日期间的所有日期按行展开保留对应字段

解决方案

首先确认你的pandas版本支持explode方法(pandas 0.25及以上版本均支持,完全适配你使用的JupyterLab 3.1.9环境),实现代码如下:

import pandas as pd

# 第一步:将日期列转为datetime类型,避免字符串格式导致的计算错误
df['StartDate'] = pd.to_datetime(df['StartDate'])
df['EndDate'] = pd.to_datetime(df['EndDate'])

# 第二步:对每行生成起止日期范围内的所有连续日期序列
df['Date'] = df.apply(lambda x: pd.date_range(start=x['StartDate'], end=x['EndDate'], freq='D'), axis=1)

# 第三步:将日期序列拆分为单独行,保留对应ProductId,筛选需要的字段
df1 = df.explode('Date')[['ProductId', 'Date']].reset_index(drop=True)

# 如果需要Date列为字符串格式,可额外执行下面这行
# df1['Date'] = df1['Date'].dt.strftime('%Y-%m-%d')

运行后得到的df1即为你要求的输出格式。
如果你的pandas版本低于0.25不支持explode,可以使用遍历的替代方案:

df_list = []
for _, row in df.iterrows():
    date_range = pd.date_range(start=row['StartDate'], end=row['EndDate'], freq='D')
    temp_df = pd.DataFrame({'ProductId': [row['ProductId']]*len(date_range), 'Date': date_range})
    df_list.append(temp_df)
df1 = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:04