猿问

如果在滚动 7 天间隔内出现次数大于 x,则熊猫计数

我有一个带有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

请问我应该如何更改算法?


qq_笑_17
浏览 176回答 1
1回答

桃花长相依

df.rolling如果每个 user_id 都有一个系列,我会使用7 天的偏移量。然后您可以检查系列中是否有任何地方的滚动总和大于或等于3。要获取每个用户的系列,请使用set_index()和unstack:(df.set_index(['time_stamp', 'user_id']).unstack().rolling('7D').sum().ge(3).any())#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;user_id#visited&nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; False#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;True
随时随地看视频慕课网APP

相关分类

Python
我要回答