“ static_frame.Series”索引上的“ Groupby”功能

时间:2019-04-21 18:54:17

标签: python static-frame

我有一个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。

1 个答案:

答案 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>