pandas groupby同时添加和平均[重复]

Posted

技术标签:

【中文标题】pandas groupby同时添加和平均[重复]【英文标题】:pandas groupby add and average at the same time [duplicate] 【发布时间】:2021-04-23 04:17:15 【问题描述】:

我有一个包含进程列表的数据框以及它们花费的时间如下

我想得到以下结果

我知道如何使用 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)

【问题讨论】:

看看named aggregation:processes.groupby("ps").agg(total_time=("time", "sum"),avg_time=("time", "size")) 【参考方案1】:
processes.groupby('ps').agg(TOTAL_TIME=('time','sum'),AVARAGE=('time','mean'),NRTIMES=('time','size'))

【讨论】:

【参考方案2】:

试试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

【讨论】:

以上是关于pandas groupby同时添加和平均[重复]的主要内容,如果未能解决你的问题,请参考以下文章

应用 pandas groupby 后,在绘图中添加条形以显示平均值

具有多列的groupby,在pandas中具有添加和频率计数[重复]

Python/Pandas - 结合 groupby 平均值和最小值

Pandas Groupby:计数和平均值相结合

使用 pandas GroupBy 和时间序列重采样的平均聚合

使用 pandas groupby + apply 和 condensing groups 计算平均值的更快方法