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

使用total_second计算跨日期Elapsed_time出现负值的解决需求

解决跨日期时Elapsed_time负值问题

问题说明

计算CSV数据的经过时间(Elapsed_time)时,跨日期后Elapsed_time出现负值,需要实现跨日期后持续递增的经过时间。

现有代码

import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
import pylab as pl
import pandas as pd 

dft = pd.read_csv("/content/drive/MyDrive/toa_data/to_csv_out_columns.csv", encoding="UTF-8")
dft["Time"] = pd.to_datetime(dft["Time"])
dft["second"] = pd.to_timedelta(dft["Time"].dt.time.astype(str)).dt.total_seconds()#.div(60)

dft = dft.set_index("second")
#dft.index = pd.to_datetime(dft.index)
dft['diff'] = dft.index.to_series().diff()
dft["Elapsed_time"]=dft["diff"].cumsum()

dft.head(5)

现有输出

second  Time    Elapsed_time    value   diff
72446   2023-04-22 20:07:26     3.16    
72506   2023-04-22 20:08:26 60  3.16    60
72566   2023-04-22 20:09:26 120 3.17    60
72626   2023-04-22 20:10:26 180 3.18    60
--------------omission-----------------------------------
86306   2023-04-22 23:58:26 13860   3.41    60
86366   2023-04-22 23:59:26 13920   3.41    60
26  2023-04-23 0:00:26  -72420  3.41    -86340
86  2023-04-23 0:01:26  -72360  3.41    60
146 2023-04-23 0:02:26  -72300  3.41    60
--------------------------------------------------

期望输出

second  Time    Elapsed_time    value   diff
72446   2023-04-22 20:07:26     3.16    
72506   2023-04-22 20:08:26 60  3.16    60
72566   2023-04-22 20:09:26 120 3.17    60
72626   2023-04-22 20:10:26 180 3.18    60
--------------omission----------------------------
86306   2023-04-22 23:58:26 13860   3.41    60
86366   2023-04-22 23:59:26 13920   3.41    60
86426   2023-04-23 0:00:26  13960   3.41    60
86486   2023-04-23 0:01:26  14020   3.41    60
86546   2023-04-23 0:02:26  14080   3.41    60
--------------------------------------------------

解决方案

原代码问题在于仅提取了当天的秒数作为索引,跨日期后秒数重置为0开始,导致相邻时间的差值出现负数,累计后Elapsed_time变为负值。

正确做法是基于完整的datetime时间戳计算时间差,而非单独提取当天秒数。直接用每条数据的时间与第一条数据的时间做差,转成总秒数即可得到持续递增的Elapsed_time;相邻时间的差值也直接用datetime列计算。

修改后代码

import pandas as pd 

# 读取数据并转换时间列
dft = pd.read_csv("/content/drive/MyDrive/toa_data/to_csv_out_columns.csv", encoding="UTF-8")
dft["Time"] = pd.to_datetime(dft["Time"])

# 计算从第一条记录开始的经过时间(秒)
dft["Elapsed_time"] = (dft["Time"] - dft["Time"].iloc[0]).dt.total_seconds()

# 计算相邻记录的时间间隔(秒)
dft['diff'] = dft["Time"].diff().dt.total_seconds()

# 保留原有的当天秒数列(可选,若不需要可删除)
dft["second"] = (dft["Time"] - dft["Time"].dt.normalize()).dt.total_seconds()

# 查看结果
dft.head(5)

验证结果

修改后跨日期的Elapsed_time会持续递增,diff也会正确显示相邻时间的间隔(如跨日期的60秒),符合期望输出:

second  Time    Elapsed_time    value   diff
72446   2023-04-22 20:07:26     3.16    
72506   2023-04-22 20:08:26 60  3.16    60
72566   2023-04-22 20:09:26 120 3.17    60
72626   2023-04-22 20:10:26 180 3.18    60
--------------omission----------------------------
86306   2023-04-22 23:58:26 13860   3.41    60
86366   2023-04-22 23:59:26 13920   3.41    60
86426   2023-04-23 0:00:26  13960   3.41    60
86486   2023-04-23 0:01:26  14020   3.41    60
86546   2023-04-23 0:02:26  14080   3.41    60
--------------------------------------------------

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:58:11