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

使用pandas基于多规则为用户操作日志生成session ID

多规则会话ID生成实现方案

你原有代码仅覆盖了同用户5分钟超时的单一切分逻辑,未覆盖全部三个新会话触发规则,可按以下步骤实现符合要求的SessionID生成逻辑:

核心判定规则

满足任意一条规则时,当前操作记录即为新会话的起点:

  • 全局相邻两条操作日志时间间隔超过5分钟(全平台连续5分钟无任何操作时,后续所有操作开启新会话)
  • 同一用户当前操作距自身上一次操作的时间间隔超过30秒
  • 当前操作的user_req字段内容精确匹配*205#

实现代码

import pandas as pd

# 1. 基础预处理:确保时间字段格式正确、日志按时间升序排列
df['log_datetime'] = pd.to_datetime(df['log_datetime'])
df = df.sort_values(by='log_datetime').reset_index(drop=True)

# 2. 逐个生成新会话触发标记
# 全局5分钟无操作标记
cond_global_5min_timeout = df['log_datetime'].diff().gt(pd.Timedelta('5T'))
# 同用户30秒无操作标记
cond_user_30s_timeout = df.groupby('user_id')['log_datetime'].diff().gt(pd.Timedelta('30S'))
# *205#请求触发标记
cond_dial_trigger = df['user_req'].eq('*205#')

# 3. 合并所有触发条件,按用户维度累加生成会话ID
new_session_mask = cond_global_5min_timeout | cond_user_30s_timeout | cond_dial_trigger
df['SessionID'] = new_session_mask.groupby(df['user_id']).cumsum() + 1

可选调整

  • 如果需要全局唯一的SessionID(而非单用户维度从1开始计数),可拼接用户ID与会话序号:
    df['SessionID'] = df['user_id'].astype(str) + '_sess_' + df['SessionID'].astype(str)
    
  • 如果user_req字段存在冗余空格、特殊字符,匹配前先做清洗:
    df['user_req'] = df['user_req'].str.strip()
    
  • 所有时间计算依赖日志的时间顺序,禁止跳过排序步骤,否则间隔计算结果会完全错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:57:19