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

如何在Python中提取含+/-标记的不匹配事件起止对

处理事件起止对不匹配的Python实现方法

核心思路

用栈结构追踪未匹配的起始事件,遍历每条记录时:

  • 遇到+开头的起始事件,直接入栈保存时间戳和事件信息
  • 遇到-开头的结束事件,从栈顶倒序查找最近的同类型同名称起始事件,找到则配对并移除栈中对应条目;找不到则忽略该结束事件
  • 遍历结束后,栈中剩余的起始事件就是未找到对应结束的,给它们的ts2设为NA

代码实现

import pandas as pd

# 示例输入数据,格式为(时间戳, 事件标记字符串)
events = [
    (1, "+running:B"),
    (2, "+running:B"),
    (3, "-running:B"),
    (4, "+walking:A"),
    (5, "-walking:A"),
    (6, "+jumping:C")
]

stack = []
result = []

for ts, event_str in events:
    # 拆分事件符号、类型和名称
    sign, event_info = event_str[0], event_str[1:]
    event_type, event_name = event_info.split(":")
    
    if sign == "+":
        # 起始事件入栈,存储必要信息
        stack.append({
            "ts1": ts,
            "event_type": event_type,
            "event_name": event_name
        })
    else:
        # 寻找匹配的起始事件
        matched_idx = -1
        # 从栈顶往栈底找最近的同类型同名称事件
        for idx in range(len(stack)-1, -1, -1):
            if (stack[idx]["event_type"] == event_type 
                and stack[idx]["event_name"] == event_name):
                matched_idx = idx
                break
        
        if matched_idx != -1:
            # 配对成功,取出起始事件并生成结果条目
            start_event = stack.pop(matched_idx)
            result.append({
                "event_name": event_name,
                "event_type": event_type,
                "ts1": start_event["ts1"],
                "ts2": ts
            })

# 处理栈中剩余的未配对起始事件
for unpaired in stack:
    result.append({
        "event_name": unpaired["event_name"],
        "event_type": unpaired["event_type"],
        "ts1": unpaired["ts1"],
        "ts2": pd.NA
    })

# 转换为DataFrame查看结果
result_df = pd.DataFrame(result)
print(result_df)

输出结果

运行上述代码后,输出的DataFrame会正确呈现配对和未配对的情况:

event_name event_type  ts1   ts2
0          B     running    1     3
1          A     walking    4     5
2          B     running    2  <NA>
3          C     jumping    6  <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:05:03