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

Python实现:基于距离条件统计事件X的特定时间间隔发生频次

解决步骤:时间间隔统计逻辑

接下来的核心是按工厂单独筛选有效事件,再基于时间序列计算符合条件的事件次数,具体代码和逻辑如下:

1. 确保时间列格式正确

首先必须把事件时间列转为datetime类型,否则无法计算时间差:

import pandas as pd

# 替换成你的时间列实际名称,比如'timestamp'
df['time'] = pd.to_datetime(df['time'])

2. 遍历每个工厂,单独处理统计

因为每个工厂的距离过滤逻辑是独立的,需要逐个处理:

# 存储每个工厂的最终统计结果
factory_stats = {}

# 遍历所有工厂的距离列(即你之前处理的filtered的列)
for factory_name in filtered.columns:
    # 第一步:筛选出该工厂距离≤5km的所有事件,按时间排序
    valid_events = df.loc[filtered[factory_name].notna(), ['time']].sort_values('time').reset_index(drop=True)
    
    # 如果有效事件数不足2个,直接跳过(无法判断时间间隔)
    if len(valid_events) < 2:
        factory_stats[factory_name] = 0
        continue
    
    # 第二步:计算每个事件与前一个事件的时间间隔(单位:分钟)
    valid_events['prev_interval'] = valid_events['time'].diff().dt.total_seconds() / 60
    
    # 第三步:找出所有"前一次事件间隔≥50分钟"的事件(这些是间隔后的起始事件)
    trigger_events = valid_events[valid_events['prev_interval'] >= 50]
    
    # 第四步:统计每个触发事件之后10分钟内的事件次数
    total_count = 0
    for _, row in trigger_events.iterrows():
        current_time = row['time']
        # 定义10分钟的时间窗口:当前时间 ~ 当前时间+10分钟
        window_end = current_time + pd.Timedelta(minutes=10)
        # 统计窗口内的事件数量(包含当前事件,若需求是"仅之后发生的"则去掉=current_time)
        window_events = valid_events[(valid_events['time'] >= current_time) & (valid_events['time'] <= window_end)]
        total_count += len(window_events)
    
    # 保存该工厂的统计结果
    factory_stats[factory_name] = total_count

# 转换为DataFrame,方便查看和导出
result = pd.DataFrame.from_dict(factory_stats, orient='index', columns=['符合条件的事件次数'])
print(result)

关键逻辑说明

  • 按工厂独立处理:每个工厂的有效事件(距离≤5km)是独立的,必须分开统计,不能混在一起计算时间间隔。
  • 时间差计算:用diff()计算相邻事件的时间差,转成分钟单位方便判断≥50分钟的条件。
  • 窗口统计:对每个满足"间隔≥50分钟"的起始事件,划定之后10分钟的窗口,统计窗口内的事件数。如果需求是不包含当前事件,只统计之后发生的,把窗口条件改成valid_events['time'] > current_time即可。

可选优化

如果数据集规模很大,可以用pd.Series.between_time或者滚动窗口API来提升效率,但上面的代码逻辑清晰,适合中小规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:25:18