【发布时间】:2022-01-06 15:58:02
【问题描述】:
我有一些足球数据正在修改以供分析。我基本上想每周计算几个统计数据的职业生涯和每年每场比赛的平均值。
示例
我有什么:
| Player | Year | Week | Rushing Yards | Catches |
|---|---|---|---|---|
| Seth Johnson | 2020 | 1 | 100 | 4 |
| Seth Johnson | 2020 | 2 | 80 | 2 |
| Seth Johnson | 2021 | 1 | 50 | 3 |
| Seth Johnson | 2021 | 2 | 50 | 2 |
我想要什么:
| Player | Year | Week | Rushing Yards | Catches | Career Rushing Yards per Game | Career Catches per Game | Yearly Rushing Yards per Game | Yearly Catches per Game |
|---|---|---|---|---|---|---|---|---|
| Seth Johnson | 2020 | 1 | 100 | 4 | 100 | 4 | 100 | 4 |
| Seth Johnson | 2020 | 2 | 80 | 2 | 90 | 3 | 90 | 3 |
| Seth Johnson | 2021 | 1 | 50 | 3 | 76.67 | 3 | 50 | 3 |
| Seth Johnson | 2021 | 2 | 40 | 2 | 67.5 | 2.75 | 45 | 2.5 |
我想我可以分别计算职业数据和年度数据,然后加入球员/年/周的所有数据,但我不确定如何计算移动平均线,因为窗口将取决于年份和周。
我已经尝试过诸如遍历所需类别并计算滚动平均值之类的方法:
new_df['Career ' + category + ' per Game'] = df.groupby('Player')[category].apply(lambda x: x.rolling(3, min_periods=0).mean())
但是我没有找到为rolling() 制作适当的自定义窗口所需的创造力。有人在这里有什么想法吗?
【问题讨论】:
-
为什么最后一行“Career Rushing Yards per Game”是 67.5?如果是 3 个周期的滚动平均值,不应该是 (80+50+50)/3=60 吗?其他列似乎也不遵循您的 3 周期均值逻辑。
-
对不起,例子不清楚。该表显示了正确的期望输出,其中职业滚动平均值为前一周的平均值。代码示例只是一个解决方案的尝试,与表格无关。
-
您能否发布一个滚动窗口实际发生变化的更好示例?并且请使预期的输出与输入相匹配。
标签: python group-by moving-average rolling-average