Python 使用2个先前事件的熊猫移动平均值

Python 使用2个先前事件的熊猫移动平均值,python,pandas,moving-average,Python,Pandas,Moving Average,我在这里找到了移动平均线的正确公式: 问题在于,它使用的是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

我在这里找到了移动平均线的正确公式:

问题在于,它使用的是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 second entry使用他的第一行和当前行来平均。我要查找的是John和Mike最后出现的是John:6和Mike:5.5,使用前两行,而不是前一行和当前行输入。我用它来预测,不知道当前的行,因为它们还没有发生。这是我对机器学习的第一个想法

如果要在lambda函数中添加每个组的移位:

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

如果要按组移位,请添加到lambda函数:

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.rolling3['pts'].sum.reset_indexlevel=0,drop=True df['avg']=df['avg'].subdf['pts'].div2 产出:

个人平均分 0约翰10南 1迈克9南 约翰2南 3迈克2南 4约翰56.0 5麦克5.5 尝试:

df['avg']=df.groupby'person.rolling3['pts'].sum.reset_indexlevel=0,drop=True df['avg']=df['avg'].subdf['pts'].div2 产出:

个人平均分 0约翰10南 1迈克9南 约翰2南 3迈克2南 4约翰56.0 5麦克5.5