我有一个带有time_stamp
和的数据user_id
。
数据按user_id
和排序time_stamp
。
我想user_id
在 7 天的滚动间隔内为每个计算该 7 天滚动间隔内的访问次数。如果访问次数 > 3,则将该 user_id 的新列设置为 1,否则为 0。
我的数据
time_stamp,user_id,visited
2014-04-22 03:53:30,1,1
2013-11-15 03:45:04,2,1
2013-11-29 03:45:04,2,1
2013-12-09 03:45:04,2,1
2013-12-25 03:45:04,2,1
2013-12-31 03:45:04,2,1
2014-01-08 03:45:04,2,1
2014-02-03 03:45:04,2,1 <- in a 7 day interval (till 2014-02-10)
2014-02-08 03:45:04,2,1 <- there is 3 visits
2014-02-09 03:45:04,2,1 <-
预期产出
user_id outcome
1 0
2 1
我试过的:
我不知道最好的方法来做到这一点。我的第一个想法是为每个user_id
.
df['timediff'] = df.groupby(['user_id','time_stamp'])['time_stamp'].diff() / np.timedelta64(1, 'D')
但是这个输出给了所有的Nans。
2014-04-22 03:53:30 1 1 NaN
1 2013-11-15 03:45:04 2 1 NaN
2 2013-11-29 03:45:04 2 1 NaN
3 2013-12-09 03:45:04 2 1 NaN
4 2013-12-25 03:45:04 2 1 NaN
请问我应该如何更改算法?
df.rolling
如果每个 user_id 都有一个系列,我会使用7 天的偏移量。然后,您可以检查系列中是否有任何地方的滚动总和大于或等于3。要获取每个用户的系列,请使用set_index()
和unstack
:
(df.set_index(['time_stamp', 'user_id'])
.unstack()
.rolling('7D')
.sum()
.ge(3)
.any())
# user_id
#visited 1 False
# 2 True
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句