pandas.DataFrame.groupby是否保证稳定?

时间:2016-09-07 15:22:48

标签: python pandas group-by language-lawyer

我注意到pd.DataFrame.groupby有几种用法后跟apply隐式假设groupbystable - 也就是说,如果 a < / em>和 b 是同一组的实例,预先分组, a 出现在 b 之前,然后 a 也会在分组后出现在 b 之前。

我认为有几个答案显然隐含地使用了这个,但是,具体来说,这里是one using groupby+cumsum

这种行为真的有什么前途吗?该文档仅说明:

  

使用mapper(dict或key函数,将给定函数应用于组,将结果作为系列返回)或一系列列的组系列。

此外,大熊猫有指数,理论上也可以在没有这种保证的情况下实现功能(尽管以更加繁琐的方式)。

2 个答案:

答案 0 :(得分:6)

虽然文档内部没有说明,但它在生成组时使用稳定排序。

见:

正如我在评论中提到的,如果你考虑transform将返回一个系列,其索引与原始df对齐,这一点非常重要。如果排序没有保留顺序,那么这将使对齐执行额外的工作,因为它需要在分配之前对系列进行排序。事实上,这是in the comments

  

_algos.groupsort_indexer实施计算排序,至少是这样       O(ngroups),其中

     

ngroups = prod(shape)

     

shape = map(len, keys)

     

即,独特的组合(笛卡尔积)的数量是线性的       groupby键的值。当进行多键组合时,这可能是巨大的。       np.argsort(kind='mergesort')O(count x log(count)),其中count是       数据帧的长度;       两种算法都是稳定排序,这对于正确性是必要的       groupby操作。

     

e.g。考虑:           df.groupby(key)[col].transform('first')

答案 1 :(得分:1)

是的; DataFrame.groupbysort 参数的描述现在承诺 groupby(有或没有键排序)“保留每个组中的行顺序”:

<块引用>

sort : bool,默认 True

对组键进行排序。获得更好的性能 关闭此功能。请注意,这不会影响顺序 每组内的观察。 Groupby 保留行的顺序 每个组内。