python - pandas groupby 同时加法和平均法
问题描述
我有一个包含进程列表的数据框以及它们花费的时间如下
我想得到以下结果
我知道如何使用 gorupby 来获得 ONE 但只有其中一列。这就是我解决问题的方法
# the data
ps = ['p1','p2','p3','p4','p2','p2','p3','p6','p2','p4','p5','p6']
times = [20,10,2,3,4,5,6,3,4,5,6,7]
processes = pd.DataFrame({'ps':ps,'time':times})
# the series
dfsum = processes.groupby('PROCESS')['TIME'].sum()
dfcount = processes.groupby('PROCESS')['TIME'].count()
# "building" the df result
frame = { 'total_time': dfsum, 'total_nr': dfcount}
dfresult = pd.DataFrame(frame)
dfresult['average']= dfresult['total_time']/dfresult['total_nr']
dfresult
但是如何获得所需的 df 而不必逐列编写呢?对我来说,这种方法还不够“泛泛”(也不是 pythonic)
解决方案
尝试groupby.agg()
:
df.groupby('PROCESS')['TIME'].agg(['sum','mean','count'])
样本数据的输出:
sum mean count
ps
p1 20 20.00 1
p2 23 5.75 4
p3 8 4.00 2
p4 8 4.00 2
p5 6 6.00 1
p6 10 5.00 2
推荐阅读
- php - Laravel 根据投票显示前 5 个笑话
- django - 我如何在相关名称上使用 prefetch_related
- reactjs - 使用 create react app 命令处理未处理的错误事件
- database - 如何在 MS Access 中对条件或元素进行分组
- r - 在 r 中重估具有多个条件的数据
- http - Heroku 到 AWS EC2 - 内容必须通过 HTTPS 提供
- android - Xamarin Android 的稳定唯一 ID
- php - 如何使用隐藏链接在php中重定向
- java - 不从抽象类实现方法(并使其不可访问)
- python - 如何在 Google Cloud Platform 中为 Node 应用程序安装 Python3