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

如何计算Pandas DataFrame中fault列为Yes时的总时长(分钟)

Pandas计算fault列为Yes对应的总分钟时长

前置准备

首先需将datetime列转为Pandas内置的时间类型,避免字符串运算出错:

import pandas as pd

# 示例数据构造,你可以替换成自己的DataFrame
data = {
    "datetime": ["2021-08-06T09:04:00", "2021-08-06T09:05:00", "2021-08-06T09:06:00", "2021-08-06T09:07:00", "2021-08-06T09:08:00"],
    "fault": ["No", "No", "Yes", "Yes", "No"]
}
df = pd.DataFrame(data)

# 转换时间列格式
df["datetime"] = pd.to_datetime(df["datetime"])

场景1:数据严格按分钟采样(和示例一致,每行对应1分钟)

直接统计fault为Yes的行数即可,得到的就是总分钟数:

total_minutes = len(df[df["fault"] == "Yes"])
print(total_minutes)  # 输出为2,符合预期

场景2:数据采样间隔不固定(通用方案)

需要先识别连续的Yes分组,再对每个分组计算时间跨度求和:

# 给连续相同的fault值打分组标记
df["group_id"] = (df["fault"] != df["fault"].shift()).cumsum()

# 筛选所有fault为Yes的分组,计算每个分组的时间跨度求和,转成分钟
total_seconds = df[df["fault"] == "Yes"].groupby("group_id")["datetime"].agg(
    lambda x: x.max() - x.min()
).dt.total_seconds().sum()

# 对齐示例逻辑:每个整点时间戳对应完整1分钟,所以总秒数除以60后加1
total_minutes = int(total_seconds / 60) + 1
print(total_minutes)  # 输出为2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:07