Этот вид операции (разбиение на группы) обрабатывается методом .groupby
в пандах.Если мы позаботимся о том, чтобы установить индекс на время, он также даст нам правильный вывод с обратным индексом времени.
Вот пример, который в основном совпадает с вашим кодом:
df = pandas.DataFrame(
[[1, 'A', 1],
[2, 'A', 2],
[3, 'A', 3],
[1, 'B', 4],
[2, 'B', 5],
[3, 'B', 6],
[1, 'C', 7],
[2, 'C', 8],
[3, 'C', 9]],
columns=['t', 'group', 'val'])
df = df.set_index('t')
moving_avg = df.groupby('group').rolling(2).mean()
moving_avg
теперь новый фрейм данных.Обратите внимание, что поскольку в первой части я установил индекс t
, он правильно обрабатывается в группирующих и скользящих средних:
val
group t
A 1 NaN
2 1.5
3 2.5
B 1 NaN
2 4.5
3 5.5
C 1 NaN
2 7.5
3 8.5