我试图计算每个球队在Python中使用Pandas时得分的滚动平均值。我的数据如下:
league_round home_team_name away_team_name home_team_goals \
0 MLS Toronto FC Columbus Crew 0.0
1 MLS Houston Dynamo Atlanta United 4.0
2 MLS Philadelphia Union New England Revolution 2.0
3 MLS Orlando City DC United 1.0
4 MLS FC Dallas Real Salt Lake 1.0
away_team_goals
0 2.0
1 0.0
2 0.0
3 1.0
4 1.0
我试着跟随:
df_rolling = df.groupby('home_team_name')['home_team_goals'].rolling(window=3, min_periods=1).mean()
Output:
home_team_name
Atlanta United 17 3.000000
24 3.500000
46 4.000000
64 3.666667
77 3.666667
100 2.000000
124 1.666667
147 1.333333
177 1.666667
182 2.666667
218 2.000000
221 2.666667
247 2.000000
280 2.666667
330 2.333333
352 2.333333
374 2.000000
402 2.333333
404 2.666667
408 2.666667
Chicago Fire 14 3.000000
38 2.500000
上面的代码返回的移动平均值只适用于特定的主场球队,当它在主场比赛时。我的问题是,当球队在客场比赛时,如何查找并将其包含在我的滚动平均数中?如何将结果粘贴到原始df?谢谢
最佳答案
我将按如下方式解决这个问题:
根据关于家庭游戏和客场游戏的列来分隔每个数据帧。
替换列名中的home_
和away_
,以便在下一步连接这两个数据帧时,它们不会在不同的列中分开。
现在你把所有的数据都统一了,我们可以计算出滚动平均数
df1 = df.filter(regex='league|home')
df2 = df.filter(regex='league|away')
df1.columns = df1.columns.str.replace('home_', '')
df2.columns = df2.columns.str.replace('away_', '')
df = pd.concat([df1, df2], ignore_index=True)
print(df)
结果是:
league_round team_name team_goals
0 MLS Toronto FC 0.0
1 MLS Houston Dynamo 4.0
2 MLS Philadelphia Union 2.0
3 MLS Orlando City 1.0
4 MLS FC Dallas 1.0
5 MLS Columbus Crew 2.0
6 MLS Atlanta United 0.0
7 MLS New England Revolution 0.0
8 MLS DC United 1.0
9 MLS Real Salt Lake 1.0
然后使用滚动平均值:
df_rolling = df.groupby('team_name')['team_goals'].rolling(window=3, min_periods=1).mean()
print(df_rolling)
最终输出:
team_name
Atlanta United 6 0.0
Columbus Crew 5 2.0
DC United 8 1.0
FC Dallas 4 1.0
Houston Dynamo 1 4.0
New England Revolution 7 0.0
Orlando City 3 1.0
Philadelphia Union 2 2.0
Real Salt Lake 9 1.0
Toronto FC 0 0.0
Name: team_goals, dtype: float64
这种方法的缺点是你无法追踪哪些是主场比赛,哪些是客场比赛,但我认为这对计算滚动平均值并不重要。
关于python - 通过Pandas在Python中计算并粘贴每个团队的目标数的滚动平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55669372/