数据集与用户查看项目所花费的时间有关:
user_id item_id view_started
121 160 2015-10-20 17:02:02
231 160 2015-10-18 11:02:29
231 161 2015-10-18 11:05:23
121 166 2015-10-18 11:04:34
231 180 2015-10-18 11:06:16
121 182 2015-10-20 17:02:10
134 182 2015-10-18 11:02:53
124 185 2015-10-18 11:04:23
231 187 2015-10-18 11:04:45
124 190 2015-10-18 11:05:43
目标是为每个项目创建用户查看(或查看项目之间的差距)项目所花费的时间。
user_id item_id minutes
121 160 4320
...
应该在用户查看的直接项目之间计算差异。示例:X1, X2, X3 | Time between X1-X2, X2-X3...
并且需要重置每个组的时间。我认为使用diff
不是正确的方法。
df.groupby(['user_id']).apply(
lambda x: x.sort_values(['view_started'], ascending = True))['view_started'].diff()
这给出了第一个值NaT
。每组(每位用户)应重置时差
* Time probably don't reflect the above data frame due to sort
0 NaT
1 0 days 00:08:58
2 0 days 00:04:51
3 0 days 00:06:46
4 0 days 17:05:03
5 0 days 00:00:51
6 -9 days +10:21:49
7 0 days 00:02:33
答案 0 :(得分:3)
diff
在这里似乎很好,但你需要做一些家务。首先,对数据进行排序:
df = df.sort_values(by=['user_id', 'view_started']).reset_index(drop=True)
现在,您可以执行groupby
+ diff
操作。
df['minutes'] = (
df.groupby('user_id', sort=False)
.view_started
.diff()
.dt.total_seconds()
.div(60)
.shift(-1)
)
df
user_id item_id view_started minutes
0 121 166 2015-10-18 11:04:34 3237.466667
1 121 160 2015-10-20 17:02:02 0.133333
2 121 182 2015-10-20 17:02:10 NaN
3 124 185 2015-10-18 11:04:23 1.333333
4 124 190 2015-10-18 11:05:43 NaN
5 134 182 2015-10-18 11:02:53 NaN
6 231 160 2015-10-18 11:02:29 2.266667
7 231 187 2015-10-18 11:04:45 0.633333
8 231 161 2015-10-18 11:05:23 0.883333
9 231 180 2015-10-18 11:06:16 NaN