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

如何基于pandas DataFrame列值计算行时间差并统计总故障时长

Pandas 故障时长计算实现代码

首先明确计算逻辑:

  • 以Passing事件作为序列划分标识,每遇到一次Passing即开启一个新的故障统计序列
  • 每个序列内取首个Passing的时间,减去该序列内最早的Failing时间,得到单段Downtime
  • 所有单段Downtime求和得到Total Downtime

完整可运行代码如下:

import pandas as pd

# 原始数据
data = {
    'Status': ['Passing','Failing','Failing','Failing','Passing','Failing','Failing','Failing'],
    'TimeStamp': ['2021-11-25 15:15:36','2021-11-25 00:46:23','2021-11-25 00:16:03','2021-11-24 23:45:08','2021-11-25 15:15:13','2021-11-25 00:46:47','2021-11-25 00:16:09','2021-11-24 23:44:59']
}
df = pd.DataFrame(data)

# 1. 转换时间列为datetime格式,方便计算时间差
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])

# 2. 划分统计序列:每遇到Passing就生成新的序列ID
df['group_id'] = (df['Status'] == 'Passing').cumsum()

# 3. 按序列分组计算单段故障时长
def calc_downtime(group):
    # 取当前组首个Passing的时间
    pass_time = group[group['Status'] == 'Passing']['TimeStamp'].iloc[0]
    # 取当前组最早的Failing时间
    fail_time = group[group['Status'] == 'Failing']['TimeStamp'].min()
    # 计算时间差,这里返回秒为单位,也可根据需要转成小时/天等
    group['SingleDowntime'] = (pass_time - fail_time).total_seconds()
    return group

df = df.groupby('group_id', group_keys=False).apply(calc_downtime)

# 4. 计算总故障时长,所有行统一赋值总和
df['TotalDowntime'] = df['SingleDowntime'].unique().sum()

# 可选:删除辅助列group_id
df = df.drop(columns='group_id')

print(df)

输出说明

上述代码运行后,SingleDowntime列会存储对应序列的单段故障时长(单位为秒),TotalDowntime列存储所有序列故障时长总和。如果需要调整时间差单位,可修改total_seconds()为total_seconds()/3600得到小时单位,除以86400得到天单位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:06