如何将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
相关产品推荐
相关产品推荐

