计算两步工艺的日平均用时



我有一个数据框架,看起来像下面。

data = {'user': [3249, 2160, 2160, 3249, 5120, 3900, 3900, 3900, 5200, 5200], 'action': ['step 1', 'step 1', 'step 2', 'step 2', 'step 1', 'step 1', 'step 1', 'step 2', 'step 1', 'step 2'], 'time': ['2021-10-25 19:45:43', '2021-10-25 19:48:46', '2021-10-25 19:50:21', '2021-10-25 19:57:34', '2021-10-25 20:30:56', '2021-10-25 20:35:40', '2021-10-25 20:50:59', '2021-10-25 21:15:08', '2021-10-25 18:23:41', '2021-10-26 18:49:38']}
df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df['time'])
df.sort_values('time', inplace=True)
df
user    action  time
8   5200    step 1  2021-10-25 18:23:41
0   3249    step 1  2021-10-25 19:45:43
1   2160    step 1  2021-10-25 19:48:46
2   2160    step 2  2021-10-25 19:50:21
3   3249    step 2  2021-10-25 19:57:34
4   5120    step 1  2021-10-25 20:30:56
5   3900    step 1  2021-10-25 20:35:40
6   3900    step 1  2021-10-25 20:50:59
7   3900    step 2  2021-10-25 21:15:08
9   5200    step 2  2021-10-26 18:49:38

我希望能够计算用户从步骤1到步骤2所花费的平均时间,然后按天分组,最终得到如下所示:

tbody> <<tr>
日期平均时长
2021-10-25752秒
2021-10-2687957秒

我认为在使用pandas的简单方法之前,您可能需要一个逻辑密集的步骤来清理数据。就像Hoang指出的那样,用户3900有两个步骤1,后面跟着一个步骤2。在进行汇总之前,必须对其进行解释。如果您假设是1对1的关系,并且最后的步骤1是有效的(假设用户终止了前一个步骤1或者它崩溃了,等等),那么您应该删除这些重复项。如果用户成功地多次运行步骤1到步骤2,但是最后一次步骤2没有启动,那么问题就更加复杂了。因此,您不能只选择每个用户步骤的最后一次时间。

我的偏好通常是假设存在最丑陋的数据,并进行1对1匹配,从而在使用pandas聚合和pivot函数之前放弃中断的步骤1。

最新更新