从持续时间中找到平均值,但同一天的日志为1

时间:2018-09-18 14:15:51

标签: python pandas group-by statistics data-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]})

给予:

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表示平均值)。

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

示例: 该用户仍然没有工作8个小时,而是每天工作6个小时。

最终: 因此,我想将每天的小时数作为一个小时,然后再将其每天的小时数与平均值和中位数进行比较。

一种解决方案可能是:

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

但仍然按天执行,如果不按日执行,则每天都有独立的内容,与平均值无关。

1 个答案:

答案 0 :(得分:0)

这可以解决它:

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