pandas:在groupby组内对观察进行排序

时间:2016-03-18 00:17:54

标签: python pandas

根据pandas groupby sort within groups的答案,为了对每个组中的观察进行排序,需要对第一个groupby的结果执行第二次groupby。为什么需要第二个groupby?我会假设在运行第一个groupby之后已经将观察结果安排到组中,并且所需要的只是一种枚举这些组的方法(并使用apply运行order)。

2 个答案:

答案 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)