我正在尝试使用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中?非常感谢
答案 0 :(得分:0)
我将按照以下方式解决此问题:
根据有关主场比赛和客场比赛的列分隔每个数据帧。
在列名称中替换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
此方法的缺点是您无法跟踪哪些是主场比赛,哪些是客场比赛,但我认为这对于计算滚动平均值并不重要。