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

如何基于Pandas DataFrame列值生成用户搜索会话编号

Pandas 实现用户搜索会话识别的方案

前提:默认输入数据已经按照user_id + 事件发生时间升序排序,保证同一用户的事件序列是按发生顺序排列。

实现思路

  • 先按用户分组,标记组内相邻事件的类型是否发生切换
  • 计算同一用户下的累计切换次数,累计切换次数为偶数时的切换动作代表新会话开启(单次A→B或B→A是一次切换,属于同一会话,第二次切换即回到初始类型时开启新会话)
  • 结合用户变更的场景,统一标记新会话触发点,累计触发点得到全局会话编号

完整代码

import pandas as pd

# 示例数据构造,实际使用时替换为自己的DataFrame即可
df = pd.DataFrame({
    'user_id': [1,1,1,1,2,2,2,3,3,4,4],
    'event': ['A','A','B','A','A','B','B','B','A','B','B']
})

# 1. 标记user_id是否变化(触发新会话条件1)
df['user_change'] = df['user_id'] != df['user_id'].shift(1)

# 2. 按user_id分组,标记相邻event是否切换
df['event_diff'] = df.groupby('user_id')['event'].diff().ne(0).astype(int)

# 3. 同一user下计算累计切换次数
df['cum_event_diff'] = df.groupby('user_id')['event_diff'].cumsum()

# 4. 标记event切换触发新会话的情况:同一user下累计切换次数为偶数且发生了切换(触发新会话条件2)
df['event_new_session'] = (df['cum_event_diff'] % 2 == 0) & (df['event_diff'] == 1)

# 5. 合并两个新会话触发条件,计算累计会话编号
df['session_flag'] = (df['user_change'] | df['event_new_session']).cumsum()
df['search'] = 'search_' + df['session_flag'].astype(str)

# 清理中间辅助列
df = df.drop(columns=['user_change', 'event_diff', 'cum_event_diff', 'event_new_session', 'session_flag'])

print(df)

输出结果验证

运行代码后输出结果和需求示例完全一致:

user_ideventsearch
01Asearch_1
11Asearch_1
21Bsearch_1
31Asearch_2
42Asearch_3
52Bsearch_3
62Bsearch_3
73Bsearch_4
83Asearch_4
94Bsearch_5
104Bsearch_5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:57:05