Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从持续时间中查找平均值,但同一天的日志应为1_Python_Pandas_Group By_Statistics_Data Analysis - Fatal编程技术网

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

Python 从持续时间中查找平均值,但同一天的日志应为1,python,pandas,group-by,statistics,data-analysis,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-1

我有用户日志:

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()
但白天仍然如此,如果白天不这样做,那么每天的每一天都是独立的,这会扰乱平均值。

这可以解决这个问题:

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

应该是这样的。但这是免疫的双重价值,每天如前所述?