【发布时间】:2016-07-04 14:15:26
【问题描述】:
根据pandas groupby sort within groups 的答案,为了对每个组内的观察进行排序,需要对第一个groupby 的结果进行第二次groupby。为什么需要第二个groupby?我会假设在运行第一个 groupby 之后观察结果已经分组,并且所需要的只是枚举这些组的方法(并运行 apply 和 order)。
【问题讨论】:
根据pandas groupby sort within groups 的答案,为了对每个组内的观察进行排序,需要对第一个groupby 的结果进行第二次groupby。为什么需要第二个groupby?我会假设在运行第一个 groupby 之后观察结果已经分组,并且所需要的只是枚举这些组的方法(并运行 apply 和 order)。
【问题讨论】:
因为在 groupby 之后应用函数后,结果将组合回正常的未分组数据框。使用 groupby 和类似 sort 的 groupby 方法应该被认为是 Split-Apply-Combine operation
groupby 拆分原始数据帧并将该方法应用于每个组,但随后将结果再次隐式组合。
在另一个问题中,他们可以反转操作(首先排序),然后不必使用两个 groupby。他们可以这样做:
df.sort(['job','count'],ascending=False).groupby('job').head(3)
【讨论】:
sort 已弃用 sort_values
在这种情况下,他们需要第二个 group by,因为除了排序之外,他们只想保留每个组的前 3 行。
如果您只需要按组排序,您可以这样做:
df_res = df.groupby(['job','source']).agg({'count':sum}).sort_values(['job','count'],ascending=False)
一个分组就足够了。
如果您想为每个组保留最高计数的 3 行,那么您可以再次分组并使用 head() 函数:
df_res.groupby('job').head(3)
【讨论】: