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

如何使用Python实现基于5分钟间隔的用户行为数据会话划分

问题说明

你原有代码的问题是用相邻两条记录的间隔判断是否新开会话,没有跟踪会话的起始时间。比如如果用户三条记录的时间分别是第0分钟、第3分钟、第7分钟,原有逻辑会把第7分钟的记录归到第一个会话(因为和第3分钟间隔只有4分钟),但按照需求,第一个会话有效期到第5分钟,第7分钟应该属于新会话。


正确实现代码

import pandas as pd

# 1. 读入数据并按用户、时间排序(这部分你原有逻辑是对的)
df = pd.read_csv(r".\Data\Test.csv", names=['userID','timestamp'], 
                 parse_dates=[1])
df.sort_values(by=['userID','timestamp'], inplace=True)

# 2. 定义单用户会话标记函数
def tag_session(user_group):
    # 初始化第一个会话的起始时间为用户第一条记录的时间
    current_session_start = user_group['timestamp'].iloc[0]
    new_session_flag = [1]
    # 遍历用户后续所有记录
    for idx in range(1, len(user_group)):
        current_time = user_group['timestamp'].iloc[idx]
        # 判断当前时间是否超出当前会话的5分钟有效期
        if current_time - current_session_start > pd.Timedelta(5, 'm'):
            # 超出则标记为新会话,更新会话起始时间
            new_session_flag.append(1)
            current_session_start = current_time
        else:
            # 未超出则归属当前会话
            new_session_flag.append(0)
    user_group['NewSession'] = new_session_flag
    # 如果需要连续的SessionID,可放开下方注释
    # user_group['SessionID'] = new_session_flag.cumsum()
    return user_group

# 3. 按用户分组应用标记函数
df = df.groupby('userID', group_keys=False).apply(tag_session)

# 输出结果验证
print(df)

效果说明

运行上述代码得到的NewSession列和你给出的预期输出完全一致,逻辑完全符合「同一会话首次动作后5分钟内所有操作归属该会话」的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:36:00