python - 从持续时间中查找平均值,但同一天的日志为一个
问题描述
我有用户日志:
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()
但仍然每天都这样做,如果不每天这样做,那么它每天都是独立的,这与平均值相混淆。
解决方案
这可以解决它:
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
推荐阅读
- r - 将传递给 enquos 的值导出为格式 name1、name2、nameN、
- sql-server - 如何从链接服务器的两个不同表中获取数据
- python - Django Rest Framework 星级评分系统
- kubernetes - 如何展平从 configMapGenerator 生成的 configMap?
- java - 在 Java 中填充多维数组
- javascript - 异步调用链,其中最后一个调用比较第一个调用的内容
- python - 获取以给定字符串开头的列中的唯一项
- flask - 在烧瓶应用程序中导入模块的问题
- jupyter-notebook - 如何获取 IPython 或 Jupyter 笔记本中最近执行的“执行计数”?
- r - 基于某个值的子集数据框