根据pandas groupby sort within groups的答案,为了对每个组中的观察进行排序,需要对第一个groupby
的结果执行第二次groupby
。为什么需要第二个groupby
?我会假设在运行第一个groupby
之后已经将观察结果安排到组中,并且所需要的只是一种枚举这些组的方法(并使用apply
运行order
)。
答案 0 :(得分:7)
因为一旦你在一个groupby之后应用一个函数,结果会被组合回一个普通的未组合数据框。使用groupby和groupby方法(如sort)应该被认为是Split-Apply-Combine operation
groupby拆分原始数据框,并将该方法应用于每个组,但然后隐式再次组合结果。
在另一个问题中,他们可以颠倒操作(先排序),然后不必使用两个groupbys。他们可以这样做:
df.sort(['job','count'],ascending=False).groupby('job').head(3)
答案 1 :(得分:0)
在这种情况下,他们需要第二个分组,因为除了排序之外,他们只希望保留每个分组的前3行。
如果您只需要按组排序,则可以:
df_res = df.groupby(['job','source']).agg({'count':sum}).sort_values(['job','count'],ascending=False)
一个小组成员就足够了。
如果您想保留每组最高计数的3行,则可以再次分组并使用head()函数:
df_res.groupby('job').head(3)