【发布时间】: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"))
标签: python pandas group-by pandas-groupby