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

Python高效实现用户访问时间戳转session_id 适配千万级数据集

高效实现方案

直接使用Pandas向量化运算替代Python层循环,2000万条数据普通消费级机器即可在10秒内跑完,核心逻辑基于分组累加标记实现。


前置要求

确保原始数据已经按user + timestamp升序排序,若未排序先执行排序操作:

import pandas as pd
df = df.sort_values(by=["user", "timestamp"]).reset_index(drop=True)

核心实现代码

# 1. 生成新会话标记:用户第一条访问、或相邻间隔≥30分钟标记为新会话
# 若用户首条记录的minutes为空值用以下写法
df["new_session"] = df.groupby("user")["minutes"].transform(
    lambda x: (x.isna()) | (x >= 30)
)

# 若用户首条记录的minutes为0用以下写法
# df["new_session"] = df.groupby("user")["minutes"].transform(
#     lambda x: x.shift(fill_value=30) >= 30
# )

# 2. 累加新会话标记生成用户内会话序号,拼接用户ID得到全局唯一session_id
df["session_inner_id"] = df.groupby("user")["new_session"].cumsum()
df["session_id"] = df["user"].astype(str) + "_" + df["session_inner_id"].astype(str)

# 3. 可选:删除辅助字段
df = df.drop(columns=["new_session", "session_inner_id"])

输出示例

usertimestampminutessession_id
u12024-01-01 08:00:00NaNu1_1
u12024-01-01 08:10:0010u1_1
u12024-01-01 08:50:0040u1_2
u22024-01-01 09:00:00NaNu2_1

超大数据量补充方案

如果数据量超过单机内存承载,可替换为Dask框架执行上述逻辑,API和Pandas完全兼容,支持分块处理无需修改核心代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:54:03