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
应该是这样的。但这是免疫的双重价值,每天如前所述?