我有一个static_frame.Series
,就像这样:
import static_frame as sf
import numpy as np
colors = ('red', 'green')
shapes = ('square', 'circle', 'triangle')
series = sf.Series(np.arange(6), index=sf.IndexHierarchy.from_product(shapes, colors))
我希望能够执行一些“ groupby”功能,例如将所有相同颜色的值加在一起。使用pandas.Series
,我可以做到这一点:
agg_series = series.groupby(level=1).sum()
我如何对static_frame
做同样的事情?
我在the group iterator functions下看过,但是这些不允许您按索引层次结构级别进行分组。我可能可以将其变成sf.Frame
,按索引列分组,然后回退到sf.Series
;但这特别费力。与上述等效的pandas
进行比较。
如果没有简便的方法,我会将其作为功能请求发布到GitHub。
答案 0 :(得分:2)
这可以通过一种新型的组迭代器来完成,它支持基于索引值的组迭代以及对这些组的函数应用。 (这是在静态框架0.3.1。中发布的。)
使用IndexHierarchy
时,两个整数以及整数均可用于选择一个或多个索引级别进行分组。
在此处查看示例:
>>> colors = ('red', 'green')
>>> shapes = ('square', 'circle', 'triangle')
>>> s1 = sf.Series(range(6), index=sf.IndexHierarchy.from_product(shapes, colors))
>>> s1
<Series>
<IndexHierarchy>
square red 0
square green 1
circle red 2
circle green 3
triangle red 4
triangle green 5
<<U8> <<U8> <int64>
>>> s1.iter_group_index(0).apply(np.sum)
<Series>
<Index>
circle 5
square 1
triangle 9
<<U8> <int64>
>>> s1.iter_group_index(1).apply(np.sum)
<Series>
<Index>
green 9
red 6
<<U5> <int64>