我正在尝试基于系统中的用户登录来分析用户行为。来自服务器的日志具有以下几列(简化):
user_id--time--service_type
1 --- 1534889600 --- A
2 --- 1534889696 --- B
2 --- 1534890148 --- B
1 --- 1534890243 --- A
1 --- 1534890496 --- A
1 --- 1534890516 --- B
2 --- 1534890924 --- A
1 --- 1534891115 --- A
1 --- 1534891136 --- A
2 --- 1534891372 --- B
'time'以Unix时间表示,'service_type'是用户在特定时间戳(通过'time'记录)上购买的服务。使用期限结束后,用户需要重新购买。用户不能同时进行两项不同的服务-他们需要进行切换。
我试图让最长的时间由特定用户使用同一服务。例如,这是针对user_id == 1
user_id--time--service_type
1 --- 1534889600 --- A
1 --- 1534890243 --- A
1 --- 1534890496 --- A
1 --- 1534890516 --- B
1 --- 1534891115 --- A
1 --- 1534891136 --- A
返回表应为:
user_id--service_type--longest_stay
1 --- A --- 916
1 --- B --- 599
916由时间[3]-时间[0]计算,而599由时间[4]-时间[3]计算。服务A还有另一个时间间隔[5]-time [4],但是该值为21,因此不是服务A的最长停留时间(假设最后一条记录与当前时间戳非常接近)。整个分析的最终结果预计如下:
user_id--service_type--longest_stay
1 --- A --- 916
1 --- B --- 599
2 --- A --- x
2 --- B --- x
3 --- A --- x
3 --- B --- x
我刚接触Python几个月,因此难以处理这些数据争执。数据集有超过一百万行,具有15万个唯一的user_id和十二个service_type。该初创企业规模太小,无法拥有专业的数据科学家。创始人问我是否可以在此期间暂时戴上帽子:(。
我已经尝试过使用agg分组方法。它非常适合简单的计算,例如计数,总和,最大值。但是,我不知道如何检查服务是否发生更改以触发计算用户在切换之前停留在同一服务中的时间。
对于用户的第一条记录,还有一件棘手的事情,那就是没有先前的记录可以与服务差异进行比较。
我找到了一个与我的话题有关的近距离话题。这是用户连续使用时间最长的日子。
Find longest run of consecutive zeros for each user in dataframe
我将不胜感激任何指导和解释。