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

如何在日志中查找Locked事件发生后的Edit事件

解决方案:识别Locked事件后的Edit事件

步骤说明

我们可以通过分组计算锁定时间 + 时间筛选的方式实现需求,用Pandas可按以下步骤操作:

  1. 转换时间格式:将timestamp列转为datetime类型,确保能进行时间比较
  2. 分组提取锁定时间:按record分组,获取每个记录第一次出现Locked事件的时间
  3. 筛选目标事件:对每条数据,判断其时间是否晚于对应记录的锁定时间,且事件为Edit
  4. 标记符合条件的行

代码实现

import pandas as pd

# 构造示例数据
data = {
    'id': [1,2,3,4,5,6,7,8,9,10],
    'timestamp': ['2023-03-01 13:17:05', '2023-03-02 02:57:49', '2023-03-03 00:41:13',
                  '2023-03-03 14:54:34', '2023-03-04 07:29:55', '2023-03-05 02:15:10',
                  '2023-03-05 04:47:33', '2023-03-05 15:39:04', '2023-03-06 08:36:22',
                  '2023-03-06 18:37:28'],
    'record': ['record03', 'record02', 'record03', 'record03', 'record03',
               'record02', 'record01', 'record02', 'record03', 'record02'],
    'event': ['Edit', 'Edit', 'Locked', 'View', 'Edit', 'Locked', 'View', 'View', 'View', 'View']
}

df = pd.DataFrame(data)

# 1. 转换时间列
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 2. 计算每个record的首次Locked时间
lock_times = df[df['event'] == 'Locked'].groupby('record')['timestamp'].first()

# 3. 合并锁定时间到原表
df = df.merge(lock_times.rename('lock_time'), on='record', how='left')

# 4. 筛选并标记符合条件的行
df['is_violation'] = df.apply(
    lambda row: True if pd.notna(row['lock_time']) and row['timestamp'] > row['lock_time'] and row['event'] == 'Edit' else False,
    axis=1
)

# 查看结果
print(df[df['is_violation']])

结果解释

运行上述代码后,会输出符合条件的行(即示例中的第5行):

id           timestamp    record event           lock_time  is_violation
4   5 2023-03-04 07:29:55  record03  Edit 2023-03-03 00:41:13          True

关键逻辑说明

  • groupby('record')['timestamp'].first():只取每个记录第一次锁定的时间,因为如果有多次锁定,我们只关心第一次锁定后的编辑事件
  • merge操作:把每个记录的锁定时间匹配到对应的行,方便后续逐行判断
  • apply函数:逐行检查三个条件:存在锁定时间、当前时间晚于锁定时间、事件是Edit,同时满足则标记为违规

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:23