Pandas中如何生成带滚动时间戳的逐行递增数值数据
Pandas同步生成滚动时间戳+递增值数据实现方案
不需要拆分生成数值序列、时间戳序列再做拼接,直接使用Pandas原生向量化运算即可高效实现,代码简洁且性能更优。
核心实现代码
import pandas as pd import numpy as np from pandas import Timestamp # 初始基准数据 data = { 'apple': {Timestamp('2020-01-01 00:00:00'): 10}, 'orange': {Timestamp('2020-01-01 00:00:00'): 20}, 'lemon': {Timestamp('2020-01-01 00:00:00'): 30} } df = pd.DataFrame.from_dict(data) # 自定义配置参数 gen_row_num = 3 # 要生成的总行数 time_step = pd.DateOffset(years=1) # 时间滚动步长,可替换为days=1、hours=2等任意时间偏移 value_increment = 10 # 每行数值的递增值,传等长列表可实现不同列不同递增幅度 # 生成新的时间索引 new_time_index = pd.date_range( start=df.index[0] + time_step, periods=gen_row_num, freq=time_step ) # 广播计算所有递增值,无需逐行循环 new_data = df.iloc[0].to_numpy() + value_increment * np.arange(gen_row_num).reshape(-1, 1) # 组装最终结果 result = pd.DataFrame( new_data.astype(int), index=new_time_index, columns=df.columns ) result.index.name = 'date'
运行输出
执行代码后得到的结果和预期完全一致:
apple orange lemon date 2021-01-01 10 20 30 2022-01-01 20 30 40 2023-01-01 30 40 50
方案优势
- 全向量化运算,无Python层显式循环,数据量较大时性能远高于逐行构造、多表拼接的实现
- 参数灵活可配:支持任意时间滚动粒度、任意递增步长,可快速适配不同生成规则
- 无多余中间步骤,不需要单独维护数值、时间戳两个独立DataFrame再做关联,逻辑链路更短,不易出错
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

