我能够在此处找到移动平均值的适当公式:Moving Average SO Question
问题是,它使用的是先前发生的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())
从输出中,我们看到Johns的第二个条目正在使用他的第一个条目,并且当前行使用Avg。我要查找的是John和Mikes最后出现的是John:6和Mike:5.5,使用前两个而不是前一个和当前行输入。我将其用于预测,并且不知道当前行pts
,因为它们尚未发生。机器学习的新手,这是我对功能的第一个想法。
如果要按组移动,请在lambda函数中添加Series.shift
:
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
输出:
df['avg'] = df.groupby('person').rolling(3)['pts'].sum().reset_index(level=0, drop=True)
df['avg']=df['avg'].sub(df['pts']).div(2)