【发布时间】:2017-01-15 09:01:30
【问题描述】:
我注意到pd.DataFrame.groupby 有多种用法,后跟apply 隐含假设groupby 是stable - 也就是说,如果 a 和 b 是同组的实例,并且预先分组,a出现在b之前,那么a会出现在之前b 也跟着分组。
我认为有几个答案显然隐含地使用这个,但是,具体来说,这里是one using groupby+cumsum。
有什么真正有希望实现这种行为的吗?文档仅说明:
使用映射器(dict 或 key 函数,将给定函数应用于组,将结果作为系列返回)或按一系列列对系列进行分组。
此外,pandas 具有索引,理论上也可以在没有此保证的情况下实现功能(尽管以更麻烦的方式)。
【问题讨论】:
-
对不起,你问的是 2 行说
a和b是否具有相同的值,分组后是否保证它们的顺序相同?我敢肯定,我在单步执行代码时已经看到他们执行稳定排序,我必须再次找到它 -
@EdChum 是的,如果我理解正确的话。如果行 a 和 b 就分组标准而言是等效的(它们将最终在同一组中),它们是否保证保留他们的订单发布分组。我一直在实践中看到它,但有点担心文档似乎无法保证这一点。
-
我一直看到这种行为,从未见过任何其他类型的行为,文档没有指定或保证这不会打扰我的事实,但我在逐步浏览编写大量 cmets 和对稳定排序的引用,这对我来说是合乎逻辑的,因为如果分组决定更改原始顺序,则另一种方法是让像
transform这样的函数很难合并回原始 df 索引 -
@EdChum 非常感谢。
-
如果只要保留原始索引就没有保留顺序,那么它仍然会正确对齐,但如果返回的系列没有增加顺序,那么对齐就会很痛苦需要在分配回原点 df 之前进行排序
标签: python pandas group-by language-lawyer