2

问题: .agg 方法是否适用于 RollingGroupby 对象?似乎它应该和 IPython 自动填充此方法,但我收到一个错误。

文档: 我没有看到任何特定于RollingGroupby对象的内容。我可能找错地方了,但我查看了标准移动窗口函数GroupBy

样本数据:

# test data
df = pd.DataFrame({ 
    'animal':np.random.choice( ['panda','python','shark'], 12),
    'period':np.repeat(range(3), 4 ),
    'value':np.tile(range(2), 6 ),
    })

# this works as expected
df.groupby(['animal', 'period'])['value'].rolling(2).count()

animal  period    
panda   0       2     1.0
        2       8     1.0
                10    2.0
python  0       0     1.0
                1     2.0
        1       6     1.0
        2       11    1.0
shark   0       3     1.0
        1       4     1.0
                5     2.0
                7     2.0
        2       9     1.0
Name: value, dtype: float64

# this works as expected
df.groupby(['animal', 'period'])['value'].rolling(2).mean()

animal  period    
panda   0       2     NaN
        2       8     NaN
                10    0.0
python  0       0     NaN
                1     0.5
        1       6     NaN
        2       11    NaN
shark   0       3     NaN
        1       4     NaN
                5     0.5
                7     1.0
        2       9     NaN
Name: value, dtype: float64

这对我不起作用。

df.groupby(['animal', 'period'])['value'].rolling(2).agg(['count', 'mean'])

简短的例外是:

Exception: Column(s) value already selected

所需的 DataFrame 如下。我通过合并上面工作的两个 DataFrame 得到了这个,但这似乎很麻烦。

        animal  period  level_2 value_x value_y
0   panda   0   2   1.0 NaN
1   panda   2   8   1.0 NaN
2   panda   2   10  2.0 0.0
3   python  0   0   1.0 NaN
4   python  0   1   2.0 0.5
5   python  1   6   1.0 NaN
6   python  2   11  1.0 NaN
7   shark   0   3   1.0 NaN
8   shark   1   4   1.0 NaN
9   shark   1   5   2.0 0.5
10  shark   1   7   2.0 1.0
11  shark   2   9   1.0 NaN
4

1 回答 1

2

Jeff(Pandas 的主要开发者之一)

复杂.agg的从未在 上明确实现 .groupby.rolling,因此这不起作用也就不足为奇了。

于 2017-04-27T22:53:19.780 回答