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

基于DataFrame列首值为同areaId行递增更新时间戳

解决方案:按areaId递增更新startTime1时间戳

步骤1:转换数据类型

当前startTime1和waterDuration均为object类型,无法直接进行时间运算,先转换为对应可计算类型:

import pandas as pd

# 将时间列转为datetime类型
df['startTime1'] = pd.to_datetime(df['startTime1'])
# 将时长列转为数值类型(自动适配整数/浮点数)
df['waterDuration'] = pd.to_numeric(df['waterDuration'])

若waterDuration存在非数值异常值,可添加参数处理无效值:

df['waterDuration'] = pd.to_numeric(df['waterDuration'], errors='coerce')

步骤2:分组递推更新时间戳

按areaId分组,以每组首行的startTime1为初始值,累加前面所有行的waterDuration生成后续行的时间戳:

def update_group_start_time(group):
    # 取组内第一行的时间作为初始基准
    initial_time = group['startTime1'].iloc[0]
    # 计算累计时长:首行累计为0,后续行依次累加前面所有行的时长
    cumulative_duration = group['waterDuration'].shift(1).fillna(0).cumsum()
    # 生成新时间戳(unit需匹配waterDuration的实际单位:seconds/minutes/hours等)
    group['startTime1'] = initial_time + pd.to_timedelta(cumulative_duration, unit='minutes')
    return group

# 应用分组逻辑,保留所有原始列仅更新startTime1
df = df.groupby('areaId', group_keys=False).apply(update_group_start_time)

可选:还原时间戳字符串格式

如果需要将更新后的startTime1转回原字符串格式,可自定义格式输出:

# 示例格式:年-月-日 时:分:秒
df['startTime1'] = df['startTime1'].dt.strftime('%Y-%m-%d %H:%M:%S')

关键说明

  • 需确保waterDuration的实际时间单位与代码中unit参数一致,比如时长为秒则改为unit='seconds'
  • 整个操作保留所有原始列及值,仅修改startTime1列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:16:18