Попытка отфильтровать ряд действий, выполненных пользователем, если количество действий достигает порогового значения.
Вот набор данных: (Только несколько записей)
user_id,session_id,item_id,rating,length,time
123,36,28,3.5,6243.0,2015-03-07 22:44:40
123,36,29,2.5,4884.0,2015-03-07 22:44:14
123,36,30,3.5,6846.0,2015-03-07 22:44:28
123,36,54,6.5,10281.0,2015-03-07 22:43:56
123,36,61,3.5,7639.0,2015-03-07 22:43:44
123,36,62,7.5,18640.0,2015-03-07 22:43:34
123,36,63,8.5,7189.0,2015-03-07 22:44:06
123,36,97,2.5,7627.0,2015-03-07 22:42:53
123,36,98,4.5,9000.0,2015-03-07 22:43:04
123,36,99,7.5,7514.0,2015-03-07 22:43:13
223,63,30,8.0,5412.0,2015-03-22 01:42:10
123,36,30,5.5,8046.0,2015-03-07 22:42:05
223,63,32,8.5,4872.0,2015-03-22 01:42:03
123,36,32,7.5,11914.0,2015-03-07 22:41:54
225,63,35,7.5,6491.0,2015-03-22 01:42:19
123,36,35,5.5,7202.0,2015-03-07 22:42:15
123,36,36,6.5,6806.0,2015-03-07 22:42:43
123,36,37,2.5,6810.0,2015-03-07 22:42:34
225,63,41,5.0,15026.0,2015-03-22 01:42:37
225,63,45,6.5,8532.0,2015-03-07 22:42:25
Я могу groupby
данные, используя user_id
и session_id
и получить count
элементов впользователь оценил в сеансе:
df.groupby(['user_id', 'session_id']).agg({'item_id':'count'}).rename(columns={'item_id': 'count'})
Список предметов, которые пользователь оценил в сеансе, может быть получен:
df.groupby(['user_id','session_id'])['item_id'].apply(list)
Цель состоит в том, чтобы получитьследуя, если пользователь оценил более 3 элементов в сеансе, я хочу выбрать только первые три элемента (оставить только первые три элемента на пользователя в сеансе) из исходного фрейма данных.Может быть, использовать время для сортировки элементов?
Сначала попытался выяснить, какие сеансы содержат более 3, несколько пытаясь выйти за рамки.
df.groupby(['user_id', 'session_id'])['item_id'].apply(
lambda x: (x > 3).count())
Пример: из исходного df, пользователь 123
первые три записи должны принадлежать сеансу 36