Мне нужно вычислить некоторые скользящие средние значения в кадре данных и действительно не знаю, с чего начать.

Я знаю, если бы я хотел выбрать ячейку за 10 дней вперед, скажем, что я бы сделал df.shift(-10), но я рассчитываю вычислить среднее значение между 10 и 15 днями вперед.

Поэтому я думаю, что df.rolling(-10,-15).mean(), если бы я пытался вычислить только скользящее среднее, возвращающееся назад во времени, df.rolling (15, 10) .mean () работал бы отлично, и я подумал о вычисление средних значений, как это, и затем как-то сдвигая данные.

Любая помощь была бы замечательной

Большое спасибо

5
top bantz 19 Апр 2019 в 10:17

2 ответа

Лучший ответ

Вы можете рассчитать скользящее среднее на 5 дней вперед, а затем shift это еще на 10 периодов. Поскольку отрицательные значения в rolling не разрешены, вы можете инвертировать ось, вычислить в обратном направлении, а затем снова инвертировать (см. Как использовать функции Pandas roll_ * на перспективу):

df = pd.DataFrame(np.random.rand(100, 2))
df[::-1].rolling(5).mean()[::-1].shift(-10)
2
Jondiedoop 19 Апр 2019 в 07:38

Приведенный выше ответ не выглядит правильным. ИМХО, ты не должен поворачиваться и сдвигаться.

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(100, 2))) # int easier to interpret
df[::-1].rolling(window=5, min_periods=1).mean()[::-1]

Это также работает, но вы теряете последние 4 значения:

df.rolling(window=5, min_periods=1).mean().shift(-5)

Более сложная проблема произвольного смещения (смещения) скользящего окна, вероятно, должна каким-то образом использовать .shift ().

0
Laurens 11 Ноя 2019 в 15:12