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

pandas shift函数按sessionId分组计算下一个页面事件结果异常如何解决

问题原因及修正方案

错误点说明

  • 排序逻辑错误:你在sort_values方法中额外加入了pageTitle作为第二排序字段,且设置为降序排列,这会导致同一会话下的事件先按照页面名称倒序排序,完全打乱了事件实际发生的时间顺序,后续shift操作拿到的自然是错乱的下一个页面值。
  • 分组shift的写法存在索引对齐风险:你使用groupby.apply+reset_index的写法返回的序列如果和原DataFrame的索引顺序不匹配,就会出现赋值错位、非末尾行意外出现NaN的问题。

修正后代码

import pandas as pd

# 转换时间格式的逻辑保留,这部分是正确的
df['event_date'] = pd.to_datetime(df['event_date'], unit='s')

# 修正排序逻辑:仅按会话ID、事件时间升序排列,保证同一会话事件按发生顺序排列
df.sort_values(['sessionId', 'event_date'], ascending=[True, True], inplace=True)

# 直接使用分组shift方法,自动对齐原表索引,无需额外处理索引
df['next_event'] = df.groupby('sessionId')['pageTitle'].shift(-1)

# 验证结果
display(df.query('sessionId =="1"').sort_values('event_date'))
display(df.query('sessionId =="2"').sort_values('event_date'))

效果说明

修正后同一会话内的事件会严格按照发生时间排序,next_event列会正确取到当前事件的下一个跳转页面,只有每个会话的最后一条事件的next_event值为NaN,符合没有后续事件的业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:18:02