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

如何为DataFrame子集的DateTime列逐行递增1秒

问题:生成逐秒递增DateTime列的DataFrame子集

我需要创建DataFrame子集,使每个子集的DateTime列从指定起始时间开始逐行递增1秒,而非保持单一值。当前代码运行后,每个temp_df的DateTime列均为同一值,无法实现逐秒递增,求修改方案。

现有代码

import pandas as pd
import numpy as np
from datetime import datetime

st= pd.Timestamp('2018-06-18 07:59:20')
startDate = st

for labour in range(2):
    for trip in range(np.random.randint(5,7)):
        temp_df = redf[:3000].copy()
        temp_df['labor_id'] = labour
        
        temp_df['DateTime'] = startDate
        for i in range(len(temp_df)): 
            temp_df['DateTime'] += datetime.timedelta(seconds=1)
            
        startDate += datetime.timedelta(days=1, minutes=12, seconds = 3)
        print(temp_df['DateTime'].head(3))

当前输出

0   2018-06-18 08:49:20
1   2018-06-18 08:49:20
2   2018-06-18 08:49:20
Name: DateTime, dtype: datetime64[ns]
...(其余输出略)

期望输出

0   2018-06-18 08:49:20
1   2018-06-18 08:49:21
2   2018-06-18 08:49:22
Name: DateTime, dtype: datetime64[ns]
...(其余输出略)

解决方案

问题根源

原代码的错误在于:先将整个DateTime列赋值为startDate,随后循环len(temp_df)次,每次给整列加1秒。这导致每一行的时间都被累加了3000次1秒,最终所有行的时间完全相同。

修改后的代码

使用pandas内置的pd.date_range()直接生成逐秒递增的时间序列,替代低效且错误的循环操作:

import pandas as pd
import numpy as np
from datetime import datetime

st= pd.Timestamp('2018-06-18 07:59:20')
startDate = st

for labour in range(2):
    for trip in range(np.random.randint(5,7)):
        temp_df = redf[:3000].copy()
        temp_df['labor_id'] = labour
        
        # 直接生成从startDate开始,共len(temp_df)个间隔1秒的时间点
        temp_df['DateTime'] = pd.date_range(start=startDate, periods=len(temp_df), freq='S')
        
        startDate += datetime.timedelta(days=1, minutes=12, seconds = 3)
        print(temp_df['DateTime'].head(3))

说明

  • pd.date_range(start=startDate, periods=len(temp_df), freq='S')会生成一个长度与temp_df一致的时间序列,起始时间为startDate,每个后续时间点比前一个晚1秒。
  • 这种方法不仅逻辑正确,而且比逐行循环的效率高得多(尤其是处理大数据量时)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:15:51