我有以下数据框:
我想计算 FGrating
的滚动平均值根据这些规则列:
- 如果我有 4 场或更多场比赛
HorseId
,然后我计算最近 4 场比赛的滚动平均值; - 如果我参加的比赛少于 4 场,那么我会计算迄今为止参加的比赛的滚动平均值。
平均值应显示在用于计算上述指标的行的下一行。例如:前 4 场比赛的滚动平均值应显示在第 5 行。因此,第一行的正确值为 0
我正在寻找的是这样的表格:
到目前为止,我得到了最近 4 场比赛的滚动平均值,如下所示:
df.groupby('HorseId')['FGrating'].apply(lambda x: x.shift().expanding(min_periods=no_starts).mean())
但是剩下的我都坚持不下去了。你能帮我吗?
最佳答案
df['Rolling_Average'] = df.groupby('HorseID')['FGrating']/
.shift(1).transform(lambda x: x.rolling(4, 1).mean())
滚动创建一个窗口,可用于计算移动平均值,并且移位会移动行(因此不会占用实际行)
HorseID FGrating Rolling_Average
0 25620 112 NaN
1 25620 108 112.000
2 25620 111 110.000
3 25620 98 110.333
4 25620 103 107.250
5 25620 96 105.000
关于python - 如何计算一列到一定行数的滚动平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70575604/