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

Ami*_*ory 8 python group-by language-lawyer pandas

我注意到有几种用法,pd.DataFrame.groupby后面apply隐含地假设它groupby稳定的 - 也就是说,如果ab是同一组的实例,并且预先分组,a出现在b之前,则a将出现在b之后分组也是如此.

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

有什么事实可以承诺这种行为吗?文档仅说明:

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

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

EdC*_*ica 6

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

看到:

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

_algos.groupsort_indexer实现计数排序,它至少 O(ngroups)在哪里

ngroups = prod(shape)

shape = map(len, keys)

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

例如考虑: df.groupby(key)[col].transform('first')