首页 > 解决方案 > 从持续时间中查找平均值,但同一天的日志为一个

问题描述

我有用户日志:

df = pd.DataFrame({'users' : [1,1,1,2],
            'dates' : ['2018-09-06','2018-09-06','2018-09-10','2018-09-10'],
              'duration' : [3,3,8,8]})

给出:

user dates      duration
1    2018-09-09    3
1    2018-09-09    3
1    2018-09-10    8
2    2018-09-10    8
           ...

这是棘手的部分:

如您所见,一些用户将他们的工作分为两部分。因此,第 28 天的用户 1 完成了 6 个小时,但显示为 3 和 3。

简单统计的时间:

当我们计算平均时间时,任何有自己的时间的人,他们的价值观都显得极端(3 与平均数混淆)。

我可以使用平均值。但我想查看某人在一天内可能拥有的任何极端值,并将其与中位数进行比较。

示例:这个用户仍然工作了 6 小时,而不是 8 小时,这是一个极端值,以一天为单位。

最终:所以我想将任何每日时间作为一个,然后将他们的每日时间与平均值和中位数进行比较。

一种解决方案可能是:

df.groupby(['users','days'])['duration'].mean()

但仍然每天都这样做,如果不每天这样做,那么它每天都是独立的,这与平均值相混淆。

标签: pythonpandasgroup-bystatisticsdata-analysis

解决方案


这可以解决它:

df = pd.DataFrame({'users' : [1,1,1,2],
                'dates' : ['2018-09-06','2018-09-06','2018-09-10','2018-09-10'],
                  'duration' : [3,3,8,8]})


a = df.groupby(['users','dates'])['duration'].sum().reset_index()
a.groupby(['users'])['duration'].mean().reset_index()

首先通过添加所有部分(如果存在)来找到每天的总和,然后将其保持为当天的总和。稍后,找到每一天的平均值,因为所有值都来自每一天。

结果:

    users duration
0   1     7
1   2     8

推荐阅读