如何计算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
相关产品推荐
相关产品推荐

