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

如何对pandas布尔时间序列按小时聚合连续无间隔的1事件

实现方案

核心思路

连续1构成的独立事件,只会在数值从0跳变到1的时刻产生新计数。我们先标记所有跳变到1的起始点,再按小时对起始点的数量求和,即可得到每小时的独立事件数,不会重复统计连续的1。

完整代码

接在你现有生成df的代码之后运行即可:

# 标记每个独立事件的起始点:值为1代表此处是新事件开始
event_start = df.diff() == 1
# 处理每列第一行的边界:如果首行值为1,也算作一个事件起始
event_start = event_start.fillna(df.iloc[0] == 1).astype(int)

# 按小时聚合统计各条件的事件数
hourly_event_count = event_start.resample('H').sum()

边界情况说明

如果你的场景需要将跨小时的连续事件,在涉及的每个小时都计数1次(比如事件从00:59持续到01:02,那么0点和1点各统计1次),可以用自定义聚合函数实现:

def count_hour_events(group):
    # 统计当前小时内的跳变事件数
    event_cnt = (group.diff() == 1).sum()
    # 判断当前小时首行是否是前一小时延续下来的事件
    if group.iloc[0] == 1:
        last_hour_last_ts = group.index[0] - pd.Timedelta(minutes=1)
        if last_hour_last_ts in df.index and df.loc[last_hour_last_ts, group.name] == 1:
            event_cnt += 1
    return event_cnt

hourly_event_count = df.resample('H').apply(count_hour_events)

以你给出的示例数据验证,输出的0点统计结果为:condition1_bool=1、condition2_bool=0、condition3_bool=1,符合预期规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:04