gpt4 book ai didi

python Pandas : getting session start and end time to calculate session length

转载 作者:行者123 更新时间:2023-12-05 05:11:47 26 4
gpt4 key购买 nike

我有下面的数据框,它按用户和时间戳排序(在这里写成整数以使其更容易)。

我添加了一个列,使用 pandas diff() 以分钟为单位给出了与上一个事件的时间差。我将操作定义为属于同一 session ,如果它们发生在彼此的 30 分钟内。查找新 session 很容易,因为我可以查看 timediff 是否等于“NaT”或大于 30。

d = {'id': [123,  123, 123, 123, 123, 123, 234, 234],
'activity': ['view','click','click','view','click','view', 'click', 'view'],
'timestamp': [1, 2,3,4,5,6,1,2],
'timediff_min': ['NaT',1,36,2,6,124,'NaT',1],
'new_session': [1,0,1,0,0,1,1,0]}

df = pd.DataFrame(d)
df

这会产生“new_session”列。现在我可以过滤以获取带有 session 开始时间戳的数据帧,但我想获取时间戳的最终事件,以便能够计算 session 长度。所以基本上,如果只有一个事件, session 开始和 session 结束时间将相同,但如果同一 session 中有多个事件, session 开始将是第一个事件, session 结束将是最后一个事件之前下届 session 开始。所以最终的输出会是这样的

d2 = {'id': [123,   123,  123, 234, ],
'activity': ['view','click','view', 'click'] ,
'timestamp': [1, 3,6,1],
'timediff_min': ['NaT',36,124,'NaT'],
'new_session': [1,1,1,1,],
'session_start': [1,3,6,1],
'session_end': [2,5,6,2],}
pd.DataFrame(d2)

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

我用下面的方法解决了这个问题

d['time_diff'] = d.groupby('id')['timestamp'].diff()
d['new_sess'] = np.where((d.time_diff.isnull()) | (d.time_diff > 'P0DT0H30M0S'), 'yes', 'no')
new_sessions = np.where((d.time_diff.isnull()) | (d.time_diff > 'P0DT0H30M0S'))
d['sess_count'] = np.NaN
d.iloc[new_sessions[0],9] = new_sessions[0]
d.fillna(method='ffill', inplace = True)
d['sess_id'] = d.id + '-' + d.sess_count.astype(int).astype(str)

这会创建唯一的 session ID,然后我可以对其进行分组以获得最小和最大时间戳。

关于 python Pandas : getting session start and end time to calculate session length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com