我有用户日志:
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()
但仍然按天执行,如果不按日执行,则每天都有独立的内容,与平均值无关。
答案 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