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

如何用Pythonic高效方法重复DataFrame并逐天递增日期列

高效实现DataFrame重复并逐天递增日期列的方法

我来给你几个高效又Pythonic的解决方案,完美解决你重复DataFrame同时让日期列逐天递增的需求~

首先先确认你的初始DataFrame,以及关键的第一步:必须把日期列c转换成datetime类型,不然没法进行日期递增操作。先把基础代码写出来:

import pandas as pd
import numpy as np

# 还原你的初始DataFrame
data = {'a': ['c1', 'c2', 'c3', 'c4', 'c5'],
        'b': ['y', 'n', 'n', 'y', 'y'],
        'c': ['2017-10-10']*5}
df = pd.DataFrame(data)

# 转换日期列为datetime类型(这步必不可少!)
df['c'] = pd.to_datetime(df['c'])

接下来给你三种不同的实现方式,按需选择:

方法一:pd.concat + np.repeat 直观易懂

这种方法逻辑清晰,适合刚接触pandas的朋友,容易理解:

n = 3  # 你需要重复的次数
base_date = df['c'].iloc[0]

# 生成从基准日期开始的n个连续日期
date_sequence = pd.date_range(base_date, periods=n, freq='D')

# 重复原DataFrame n次
result = pd.concat([df]*n, ignore_index=True)
# 给日期列批量赋值:每个日期对应原DataFrame的所有行
result['c'] = np.repeat(date_sequence, len(df))

方法二:np.tile 替代pd.concat 性能更优

如果你的DataFrame行数很多或者重复次数n很大,用numpy的tile方法直接提取行,比pd.concat多个DataFrame的性能更好:

n = 3
base_date = df['c'].iloc[0]
date_sequence = pd.date_range(base_date, periods=n, freq='D')

# 用tile重复原DataFrame的索引,直接取出对应行
result = df.loc[np.tile(df.index, n)].reset_index(drop=True)
# 同样批量赋值日期列
result['c'] = np.repeat(date_sequence, len(df))

方法三:assign + explode 一行代码搞定

追求极致简洁的话,这个方法用pandas的assign给每行添加日期列表,再用explode炸开,一行就能完成需求:

n = 3
base_date = df['c'].iloc[0]

result = df.assign(c=[pd.date_range(base_date, periods=n, freq='D')]*len(df)).explode('c').reset_index(drop=True)

这些方法都是批量操作,相比你手动复制多个DataFrame再逐个修改日期,不仅代码更简洁,运行效率也高得多,完全符合Pythonic的风格~

内容的提问来源于stack exchange,提问作者Mohamed Thasin ah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:07