Python 如何根据时间差为用户设置会话

Python 如何根据时间差为用户设置会话,python,pandas,jupyter-notebook,analytics,data-mining,Python,Pandas,Jupyter Notebook,Analytics,Data Mining,我有一个这样结构的数据帧(按用户id、事件时间排序): 用户id 事件时间(毫秒) 每个用户id的以前事件和当前事件之间的时间差(秒) 例如 用户_1 1550844324011- 用户_1 1550844504351 180 用户_2 1550807681932- 用户2 155080770002 98 用户_2 155080980005 2020 用户_2 1550819800005 10000 然后我想为新列中的每个用户设置会话id。接下来的逻辑是:如果事件之间的时差超过900秒,那么我应

我有一个这样结构的数据帧(按用户id、事件时间排序):

用户id
事件时间(毫秒)
每个用户id的以前事件和当前事件之间的时间差(秒)

例如
用户_1 1550844324011-
用户_1 1550844504351 180

用户_2 1550807681932-
用户2 155080770002 98
用户_2 155080980005 2020
用户_2 1550819800005 10000

然后我想为新列中的每个用户设置会话id。接下来的逻辑是:如果事件之间的时差超过900秒,那么我应该为用户设置新的会话id。因此,结果应该是:

用户1 1550844324011-1
用户_1 1550844504351 180 1

用户_2 1550807681932-1
用户2 155080770002 98 1
用户_2 155080980005 2020 2
用户_2 1550819800005 10000 3

我怎样才能正确地做到这一点?请帮帮我。 谢谢

这应该行得通

#需要排序,否则.diff()将输出错误的结果
df=df.sort_值(['user_id','timestamp']))
#时间戳差异(秒)
diff_timestamp=df.groupby('user_id')['timestamp'].diff()/1000
#将在其中创建新会话id的索引
新会话=(diff_timestamp.isnull())|(diff_timestamp>900)
#为每个用户创建唯一的会话\u id
df['session\u id']=df.loc[new\u session,['user\u id','timestamp']]\
.groupby('user_id').rank(method='first').astype(int)
#向前传播最后一个有效观测值(替换NaN)
df['session\u id']=df['session\u id'].fillna(method='ffill').astype(int)



a之后,如果使用
.diff()
,请确保列为数字

谢谢你的帮助!但是第二行“diff_timestamp=df.groupby('user_id').diff()['timestamp']”存在问题。出现错误,并且“df['session\u id']=df[new\u session].groupby('user\u id').rank(method='first')。astype(int)-“NoneType”对象不可调用。无法理解原因您可以将数据集上传到某个地方吗?您使用的是哪个版本<代码>pd.\uuuuuuuuuuuuuuuuuuuuuuuuuu版本上传了数据集样本。熊猫版本为0.23