pandas 使用 2 次先前出现的移动平均线

Moving average with pandas using the 2 prior occurrences

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

问题是它使用了前 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())

输出:

从输出中我们看到约翰的第二个条目使用他的第一行和当前行来计算平均值。我正在寻找的是 John 和 Mikes 最后一次出现是 John:6 和 Mike:5.5 使用前两个,而不是前一个和当前行输入。我正在使用它进行预测并且不知道当前行 pts 因为它们还没有发生。机器学习的新手,这是我对功能的第一个想法。

如果要按组轮班,请将 Series.shift 添加到 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').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