考虑以下代码:
>>> df = pd.DataFrame(np.random.randint(0, 4, 16).reshape(4, 4), columns=list('ABCD'))
... df
...
A B C D
0 2 1 0 2
1 3 0 2 2
2 0 2 0 2
3 2 1 2 0
>>> def grouper(frame):
... return frame
...
... df.groupby('A').apply(grouper)
...
A B C D
0 2 1 0 2
1 3 0 2 2
2 0 2 0 2
3 2 1 2 0
如您所见,结果是相同的。这是文档apply
:
传递给apply的函数必须将一个数据框作为其第一个参数,并返回一个DataFrame,Series或标量。然后,apply将负责将结果重新组合到单个数据帧或系列中。因此,apply是一种高度灵活的分组方法。
Groupby会将组分成小数据帧,如下所示:
A B C D
2 0 2 0 2
A B C D
0 2 1 0 2
3 2 1 2 0
A B C D
1 3 0 2 2
apply
文档说它将数据框组合回单个数据框。我很好奇它如何以最终结果与原始数据帧相同的方式将它们组合在一起。如果已使用concat
,则最终数据帧将等于:
A B C D
2 0 2 0 2
0 2 1 0 2
3 2 1 2 0
1 3 0 2 2
我很好奇这个连接是如何完成的。
如果查看源代码,将会看到有一个参数not_indexed_same
可以检查groupby之后索引是否保持不变。如果相同,则groupby会在返回结果之前对数据帧进行重新索引。我不知道为什么要实施。
更改于2011年8月21日进行,Wes对更改未发表任何评论:https : //github.com/pandas-dev/pandas/commit/00c8da0208553c37ca6df0197da431515df813b7#diff-720d374f1a709d0075a1f0a02445cd65
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句