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

如何在Pandas中按起止日期扩展行并保留起始日期?

解决Pandas按日期范围扩展行并保留起始/结束日期的问题

问题核心

现有代码的问题在于:

  • 计算重复次数时仅用了date_end - date_start的天数,会少生成起始日期对应的行(比如日期差1天只会生成1行,但实际需要包含起始+结束的2行)
  • cumcount() + 1会让起始日期直接加1天,导致丢失原始起始日期

修正后的实现代码

import pandas as pd

# 确保日期列是datetime类型(若未转换需执行)
df['date_start'] = pd.to_datetime(df['date_start'])
df['date_end'] = pd.to_datetime(df['date_end'])

# 计算重复次数:日期差天数 + 1(包含起始和结束日期)
d = (df['date_end'] - df['date_start']).dt.days + 1
df1 = df.reindex(df.index.repeat(d))

# 按原分组计算累计索引(从0开始)
i = df1.groupby(level=0).cumcount()

# 生成每日日期:起始日期 + 累计天数
df1['Dailydate'] = df1['date_start'] + pd.to_timedelta(i, unit='d')

# 重置索引(可选,优化索引整洁度)
df1 = df1.reset_index(drop=True)

代码说明

  1. 日期类型转换:先将date_start和date_end转为datetime类型,避免后续时间计算出错
  2. 重复次数修正:用天数差 + 1,保证起始、结束日期都能生成对应行
  3. 累计索引从0开始:cumcount()默认从0开始,累加0天即为起始日期,依次递增得到完整日期序列
  4. 生成每日日期:通过pd.to_timedelta将累计天数转为时间差,与起始日期相加得到目标日期列

运行后输出会完全匹配你给出的期望结果,包含每个日期范围的起始、中间、结束日期行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:49:51