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

在Pandas中统计时间窗口内各事件类型的出现次数

解决方案

实现思路

要给每个唯一event_type新增列,统计每行时间戳前10ms窗口内对应事件的出现次数,可按以下步骤操作:

  1. 为每个事件类型生成哑变量列(仅当该行属于对应类型时为1,否则为0)
  2. 对每个哑变量列使用时间滚动窗口(窗口大小10ms)计算累计次数,窗口不包含当前行(避免统计自身)

完整代码

import pandas as pd

data = {
    'event_timestamp': [
        '2024-02-01 08:02:09.065315961', '2024-02-01 08:02:09.125612099', '2024-02-01 08:02:09.160326512',
        '2024-02-01 08:02:09.540206541', '2024-02-01 08:02:09.571751697', '2024-02-01 08:02:09.571784060',
        '2024-02-01 08:02:09.574368029', '2024-02-01 08:02:09.574390737', '2024-02-01 08:02:09.578245099',
        '2024-02-01 08:02:10.077399943', '2024-02-01 08:02:10.077424252', '2024-02-01 08:02:10.081648527'
    ],
    'event_type': [
        'A', 'B', 'A', 'A', 'C', 'B', 'A', 'C', 'B', 'A', 'C', 'B'
    ]
}

df = pd.DataFrame(data)
df['event_timestamp'] = pd.to_datetime(df['event_timestamp'])

# 获取所有唯一事件类型
unique_types = df['event_type'].unique()

for event_type in unique_types:
    # 创建临时哑变量列
    df[f'temp_{event_type}'] = (df['event_type'] == event_type).astype(int)
    # 计算10ms窗口内的累计次数,closed='left'确保窗口不包含当前行
    df[f'count_{event_type}'] = df[f'temp_{event_type}'].rolling(
        window='10ms',
        on='event_timestamp',
        closed='left'
    ).sum().fillna(0).astype(int)
    # 删除临时列
    df.drop(f'temp_{event_type}', axis=1, inplace=True)

# 调整列顺序匹配示例
df = df[['event_timestamp', 'event_type', 'count_A', 'count_B', 'count_C']]
print(df)

代码说明

  • 哑变量列:通过(df['event_type'] == event_type).astype(int)生成仅对应事件类型为1的临时列,简化窗口统计逻辑
  • 时间滚动窗口:
    • window='10ms':设置窗口大小为10毫秒
    • on='event_timestamp':指定按时间戳列进行窗口计算
    • closed='left':窗口包含左边界(当前行时间戳之前的时间),不包含当前行,精准匹配“之前10ms”的需求
  • 填充与类型转换:用fillna(0)处理初始行无前置数据的情况,astype(int)确保计数为整数格式

输出结果

运行代码后将得到与示例完全一致的DataFrame:

event_timestamp event_type  count_A  count_B  count_C
0  2024-02-01 08:02:09.065315961          A        0        0        0
1  2024-02-01 08:02:09.125612099          B        0        0        0
2  2024-02-01 08:02:09.160326512          A        0        0        0
3  2024-02-01 08:02:09.540206541          A        0        0        0
4  2024-02-01 08:02:09.571751697          C        0        0        0
5  2024-02-01 08:02:09.571784060          B        0        0        1
6  2024-02-01 08:02:09.574368029          A        0        1        1
7  2024-02-01 08:02:09.574390737          C        1        1        1
8  2024-02-01 08:02:09.578245099          B        1        1        2
9  2024-02-01 08:02:10.077399943          A        0        0        0
10 2024-02-01 08:02:10.077424252          C        1        0        0
11 2024-02-01 08:02:10.081648527          B        1        1        0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:05:10