为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2021-11-16 14:35:55
我有一个带有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


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信