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

Pandas中7天时间窗口内前置连续TRUE行的计数问题求助

Pandas不规则时间序列7天窗口连续TRUE计数实现

核心逻辑说明

针对不规则采样的时间序列,计算当前行之前7天窗口内的紧邻连续TRUE行数,满足两个规则:

  • 若当前行的前一行result为FALSE,计数为0
  • 若前一行result为TRUE,仅统计7天时间窗口内的连续TRUE数量

实现方案

方案1:rolling时间窗口实现(中小数据量,逻辑直观)

该方案直接调用Pandas原生时间窗口滚动接口,逻辑清晰易调试,适合万级及以下数据量:

import pandas as pd

# -------------------------- 第一步:数据预处理 --------------------------
# 确保time列为datetime类型,且按时间升序排序
df["time"] = pd.to_datetime(df["time"])
df = df.sort_values("time").reset_index(drop=True)

# -------------------------- 第二步:定义计数函数 --------------------------
def count_7d_streak(window):
    # 窗口为空(首行)直接返回0
    if len(window) == 0:
        return 0
    # 前一行是FALSE直接返回0
    if not window.iloc[-1]["result"]:
        return 0
    # 倒序统计连续TRUE数量
    count = 0
    for row in reversed(window.itertuples()):
        if row.result:
            count += 1
        else:
            break
    return count

# -------------------------- 第三步:应用滚动计算 --------------------------
# 设time为索引,使用7天时间窗口,closed='left'表示仅统计当前行之前的数据
df = df.set_index("time")
df["DESIRED OUTPUT"] = df.rolling("7D", closed="left").apply(count_7d_streak)["result"].astype(int).values
df = df.reset_index()

方案2:向量化优化实现(大数据量,性能更高)

针对十万级以上数据量,可使用向量化逻辑避免逐行遍历,性能提升10倍以上:

import pandas as pd

# 预处理:时间转换、排序
df["time"] = pd.to_datetime(df["time"])
df = df.sort_values("time").reset_index(drop=True)

# 标记连续 streak 中断的两种情况:前一行为FALSE / 前一行时间与当前行间隔超过7天
df["prev_result"] = df["result"].shift()
df["streak_break"] = (df["prev_result"] == False) | (df["time"] - df["time"].shift() > pd.Timedelta(days=7))

# 生成streak分组ID,组内计数
df["streak_id"] = df["streak_break"].cumsum()
df["DESIRED OUTPUT"] = df.groupby("streak_id").cumcount()

# 符合规则1:前一行为FALSE时直接置0
df.loc[df["prev_result"] == False, "DESIRED OUTPUT"] = 0

# 清理临时列
df = df.drop(columns=["prev_result", "streak_break", "streak_id"])

效果验证

将提供的示例数据代入上述代码,输出结果与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:03