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

如何复制DataFrame行并逐日递增指定日期列的值

解决Pandas按行生成日期递增重复行的需求

直接上可行的实现方案,分两种方式,优先推荐第一种更简洁高效的:

方法一:用explode实现(推荐)

先导入依赖库:

import pandas as pd
from pandas.tseries.offsets import DateOffset

假设你的原始DataFrame已经存在,先给个示例构造(如果你的数据是现成的,跳过这步):

# 构造4列12行的示例DataFrame
data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='MS'),
    'col1': [f'item_{i}' for i in range(12)],
    'col2': range(1,13),
    'col3': [i*10 for i in range(12)]
}
df = pd.DataFrame(data)

核心实现代码:

# 为每行生成指定范围的日期序列,存入新列
df['date_series'] = df['date'].apply(
    lambda x: pd.date_range(start=x, end=x + DateOffset(months=1), freq='d')
)

# 展开日期序列列,同时保留其他列的重复值,最后替换原date列
result_df = df.explode('date_series').drop(columns='date').rename(columns={'date_series': 'date'})

# 可选:重置索引
result_df = result_df.reset_index(drop=True)

原理很简单:

  • 用apply给每行的date生成你要的月度日期序列,存成列表格式的列
  • explode会把列表里的每个日期拆成单独一行,其他列自动重复对应行的值
  • 最后删掉原date列,把新的日期列重命名回去就行

方法二:循环拼接(兼容旧思路)

如果习惯用循环处理每行,也可以这么写:

result_list = []
# 遍历原始DataFrame的每一行
for idx, row in df.iterrows():
    # 生成当前行对应的日期范围
    date_seq = pd.date_range(start=row['date'], end=row['date'] + DateOffset(months=1), freq='d')
    # 复制当前行len(date_seq)次,生成临时DataFrame
    temp_df = pd.DataFrame([row]*len(date_seq))
    # 替换临时DataFrame的date列为生成的日期序列
    temp_df['date'] = date_seq
    # 加入结果列表
    result_list.append(temp_df)

# 合并所有临时DataFrame
result_df = pd.concat(result_list, ignore_index=True)

两种方法都能实现需求,第一种explode的写法更简洁,执行效率也更高,适合你这种12行的小数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:55:32