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

如何将DataFrame中的时间戳转换为从t=0开始的数值时间?

解决方案

方法一:累计求和实现(高效简洁)

由于你的DURATION字段已经是秒数格式,直接通过累计求和就能快速生成t=0起始的时间戳:

import pandas as pd

# 生成START_POINT:第一个值为0,后续为前面所有DURATION的累计和
df['START_POINT'] = [0] + df['DURATION'].iloc[:-1].cumsum().tolist()

# 生成END_POINT:当前START_POINT加上对应DURATION,最后一行因DURATION为NaN自动返回NaN
df['END_POINT'] = df['START_POINT'] + df['DURATION']

方法二:逐行遍历处理(适配特殊场景)

如果需要对部分行做自定义逻辑处理,可采用逐行遍历的方式:

import pandas as pd

# 重置索引方便遍历操作
df_reset = df.reset_index()

# 初始化第一行的转换值
df_reset.loc[0, 'START_POINT'] = 0
df_reset.loc[0, 'END_POINT'] = df_reset.loc[0, 'DURATION']

# 从第二行开始计算累计时间
for i in range(1, len(df_reset)):
    df_reset.loc[i, 'START_POINT'] = df_reset.loc[i-1, 'END_POINT']
    if pd.notna(df_reset.loc[i, 'DURATION']):
        df_reset.loc[i, 'END_POINT'] = df_reset.loc[i, 'START_POINT'] + df_reset.loc[i, 'DURATION']
    else:
        df_reset.loc[i, 'END_POINT'] = None

# 恢复原多级索引
df = df_reset.set_index(['island', 'Stage'])

两种方法最终都会得到目标格式:第一行START_POINT为0,后续行的起始时间等于上一行的结束时间,结束时间为起始时间加当前持续时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:25:32