python - 如何计算一列到一定行数的滚动平均值?

标签 python pandas dataframe

我有以下数据框:

<表类=“s-表”> <标题> 马ID F光栅 <正文> 25620 112 25620 108 25620 111 25620 98 25620 103 25620 96

我想计算 FGrating 的滚动平均值根据这些规则列:

  1. 如果我有 4 场或更多场比赛 HorseId ,然后我计算最近 4 场比赛的滚动平均值;
  2. 如果我参加的比赛少于 4 场,那么我会计算迄今为止参加的比赛的滚动平均值。

平均值应显示在用于计算上述指标的行的下一行。例如:前 4 场比赛的滚动平均值应显示在第 5 行。因此,第一行的正确值为 0

我正在寻找的是这样的表格:

<表类=“s-表”> <标题> 马ID F光栅 滚动平均值 <正文> 25620 112 0 25620 108 112 (112/1) 25620 111 110 (112+108)/2 25620 98 110.33 (112+108+111)/3 25620 103 107.25 (112+108+111+98)/4 25620 96 105 (108+111+98+103)/4

到目前为止,我得到了最近 4 场比赛的滚动平均值,如下所示:

df.groupby('HorseId')['FGrating'].apply(lambda x: x.shift().expanding(min_periods=no_starts).mean())

但是剩下的我都坚持不下去了。你能帮我吗?

最佳答案

也许尝试使用rollingshift :

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/

相关文章:

python - 如何可靠地检测 python 文档字符串是否处于静止状态?

python - Pandas Dataframe检查id在时间间隔内是否出现大于1

r - 从 R 中的 data.frame 中某一列的每一行获取第一个字母

python - 基于差异的过滤数据框有两个系列,一个通过字典映射

python - 如何使用 pandas 更改数据框中文本的字体大小

r - 将数据帧组合到 R 中的特定列表中

Python - 使用 scipy 查找函数的零

python - 根据bool值不断更新tf.cond

python - 如何使用 pandas/sqlalchemy 在 .db 文件中创建多个表

python - 根据另一个 Pandas 数据框有条件地提取 Pandas 行