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

基于Flag条件计算DataFrame连续行时间差并转换为小时

解决方案

首先先把time列统一转换为datetime类型,避免后续重复转换:

df['time'] = pd.to_datetime(df['time'])

接下来,只在flag为Off的行计算与上一行的时间差,并转换为小时单位,其他行保留NaN:

# 计算时间差,仅在flag为Off时赋值,其余为NaN
df['diff_hours'] = (df['time'] - df['time'].shift(1)).where(df['flag'] == 'Off')

# 将timedelta转换为小时数(total_seconds()获取总秒数,除以3600得到小时)
df['diff_hours'] = df['diff_hours'].dt.total_seconds() / 3600

也可以合并成一步操作:

df['diff_hours'] = (df['time'] - df['time'].shift(1)).where(df['flag'] == 'Off').dt.total_seconds() / 3600

最终得到的结果如下:

timeflagdiff_hours
2021-01-01 22:00:12OnNaN
2021-01-05 22:49:12Off96.816667
2021-01-06 21:00:00OnNaN
2021-01-06 23:59:15Off2.9875
2021-01-07 05:00:55OnNaN
2021-01-07 12:00:39Off6.995556

这种方式只针对有意义的行计算时间差,避免了冗余运算,同时完成了小时单位的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:29:56