我有一个带有time_stamp和的数据user_id。数据按user_id和排序time_stamp。我想user_id在 7 天滚动间隔内计算每个7 天滚动间隔内的访问次数。如果访问次数 > 3,则将该 user_id 的新列设置为 1,否则为 0。我的数据time_stamp,user_id,visited2014-04-22 03:53:30,1,12013-11-15 03:45:04,2,12013-11-29 03:45:04,2,12013-12-09 03:45:04,2,12013-12-25 03:45:04,2,12013-12-31 03:45:04,2,12014-01-08 03:45:04,2,12014-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 visits2014-02-09 03:45:04,2,1 <-预期产出user_id outcome1 02 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 NaN1 2013-11-15 03:45:04 2 1 NaN2 2013-11-29 03:45:04 2 1 NaN3 2013-12-09 03:45:04 2 1 NaN4 2013-12-25 03:45:04 2 1 NaN请问我应该如何更改算法?
1 回答

桃花长相依
TA贡献1860条经验 获得超8个赞
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
添加回答
举报
0/150
提交
取消