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

在pandas DataFrame中将NaT替换为时间区间上限时间戳

问题修复方案

问题原因

  • 原有代码中upper_timestamp基于end列计算,最后一行的end为NaT,导致对应的upper_timestamp值也为NaT,fillna使用空值填充自然无法生效。

修复代码

支持自定义时间区间,无需硬编码上限:

import pandas as pd
import numpy as np

# 自定义时间区间,可按需修改,第一个参数为区间开始时间,第二个为区间结束时间
time_window = ('08:00:00', '09:00:00')
window_upper_delta = pd.Timedelta(time_window[1])

df = pd.read_csv('df.csv')
df['date'] = pd.to_datetime(df['date'])
diff_ids = df['id'] != df['id'].shift(1)
df = df[diff_ids].copy()
df['start'] = df['date']
df['end'] = df['date'].shift(-1)
# 基于无空值的date列计算当日区间上限
upper_timestamp = df['date'].dt.normalize() + window_upper_delta
df['end'] = df['end'].fillna(upper_timestamp)
df['duration'] = df['end'] - df['start']
print(df)

运行说明

  • 如需调整时间区间,直接修改time_window参数即可,比如修改为('09:00:00', '12:00:00')就会自动使用12:00作为当日区间上限
  • 代码中使用无空值的date列计算上限,可以正确生成最后一行的上限时间,填充end列的NaT,最终得到符合预期的时长计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:09:01