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

如何在Pandas DataFrame中为用户生成会话序号与问题序号列

生成用户会话序号与问题序号的Pandas实现

首先是你提供的示例数据生成代码:

import pandas as pd

usr_id = [121,121,121,121,135,135,135,135,135,135,135,135,135]
ses_id = [95,95,95,108,97,97,97,97,98,98,98,101,101]
que_id = [1,8,15,23,1,42,9,5,7,9,10,17,20]

df = pd.DataFrame(list(zip(usr_id, ses_id, que_id)),
               columns =['usr_id', 'ses_id', 'que_id'])

生成问题序号(que_no)

你之前的写法是可行的,为了更清晰体现会话归属用户的逻辑,也可以按usr_id和ses_id组合分组:

# 每个会话内的问题按出现顺序编号,从1开始
df['que_no'] = df.groupby(['usr_id', 'ses_id']).cumcount() + 1

生成会话序号(ses_no)

用Pandas原生的factorize结合分组transform就能高效实现每个用户的会话按顺序编号:

# 每个用户下的会话按首次出现顺序编号,从1开始
df['ses_no'] = df.groupby('usr_id')['ses_id'].transform(lambda x: x.factorize()[0] + 1)

最终结果

执行上述代码后,DataFrame的结构如下:

usr_idses_idque_idque_noses_no
12195111
12195821
121951531
1211082312
13597111
135974221
13597931
13597541
13598712
13598922
135981032
1351011713
1351012023

原理说明:factorize()会将每个用户组内的唯一ses_id映射为从0开始的整数,加1后得到从1开始的会话序号;transform方法保证结果对齐到原DataFrame的每一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:20:23