Ami*_*ory 8 python group-by language-lawyer pandas
我注意到有几种用法,pd.DataFrame.groupby后面apply隐含地假设它groupby是稳定的 - 也就是说,如果a和b是同一组的实例,并且预先分组,a出现在b之前,则a将出现在b之后分组也是如此.
我认为有几个答案显然隐含地使用了这个,但是,具体来说,这里有一个使用groupby+cumsum.
有什么事实可以承诺这种行为吗?文档仅说明:
使用mapper(dict或key函数,将给定函数应用于组,将结果作为系列返回)或通过一系列列的组系列.
此外,具有指数的大熊猫,理论上也可以在没有这种保证的情况下实现功能(尽管以更麻烦的方式).
虽然文档内部没有说明,但它在生成组时使用稳定排序.
看到:
正如我在评论中提到的,如果你考虑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')
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |