Совокупный метод Pandas на RollingGroupby

Вопрос. Работает ли метод .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 находится ниже. Я получил это от слияния двух DataFrames, которые работали выше, но это кажется громоздким.

        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

person ac2001    schedule 27.04.2017    source источник


Ответы (1)


Джефф (один из основных разработчиков Pandas) сказал:

сложный .agg никогда не был явно реализован на .groupby.rolling, поэтому неудивительно, что это не работает.

person MaxU    schedule 27.04.2017
comment
Спасибо, Макс. Если не возражаете, вы это знали или где искали? - person ac2001; 28.04.2017
comment
@ac2001, google. ком/ ;-) - person MaxU; 28.04.2017
comment
Ха-ха. Я конечно чувствую себя манекеном. :) - person ac2001; 28.04.2017
comment
@ac2001, сначала я попробовал несколько подходов сам, затем попытался найти это в исходном коде и только после этого погуглил - так что я тоже чувствую себя болваном ;-) - person MaxU; 28.04.2017