Скользящее среднее с pandas с использованием 2 предыдущих вхождений - PullRequest
1 голос
/ 22 февраля 2020

Мне удалось найти правильную формулу для Скользящего среднего здесь: Скользящее среднее SO Вопрос

Проблема в том, что он использует 1 вхождение до текущего и текущий ввод строк. Я пытаюсь использовать 2 предыдущих вхождения в строку, которую пытаюсь предсказать.

import pandas as pd
import numpy as np

df = pd.DataFrame({'person':['john','mike','john','mike','john','mike'],
                    'pts':[10,9,2,2,5,5]})

df['avg'] = df.groupby('person')['pts'].transform(lambda x: x.rolling(2).mean())

ВЫХОД: OUTPUT

Из результатов мы видим, что Вторая запись Johns использует свою первую и текущую строки для Avg. То, что я ищу, - это последние вхождения Джона и Майка: Джон: 6 и Майк: 5.5 с использованием предыдущих двух, а не предыдущего и ввода текущих строк. Я использую это для прогноза и не буду знать текущие строки pts, потому что они еще не произошли. Новичок в машинном обучении, и это была моя первая мысль о функции.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2020

Если хотите сдвиг по группам, добавьте Series.shift к лямбда-функции:

df['avg'] = df.groupby('person')['pts'].transform(lambda x: x.rolling(2).mean().shift())
print (df)
  person  pts  avg
0   john   10  NaN
1   mike    9  NaN
2   john    2  NaN
3   mike    2  NaN
4   john    5  6.0
5   mike    5  5.5
0 голосов
/ 22 февраля 2020

Попробуйте:

df['avg'] = df.groupby('person').rolling(3)['pts'].sum().reset_index(level=0, drop=True)

df['avg']=df['avg'].sub(df['pts']).div(2)

Выходы:

  person  pts  avg
0   john   10  NaN
1   mike    9  NaN
2   john    2  NaN
3   mike    2  NaN
4   john    5  6.0
5   mike    5  5.5
...