通过Pandas在Python中计算并粘贴每个团队的目标数的滚动平均值

时间:2019-04-13 20:03:23

标签: python pandas dataframe

我正在尝试使用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中?非常感谢

1 个答案:

答案 0 :(得分:0)

我将按照以下方式解决此问题:

  1. 根据有关主场比赛和客场比赛的列分隔每个数据帧。

  2. 在列名称中替换home_away_,以便在下一步连接两个数据框时,它们不会分开在不同的列中。

  3. 现在您已统一所有数据,我们可以计算滚动平均值


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

此方法的缺点是您无法跟踪哪些是主场比赛,哪些是客场比赛,但我认为这对于计算滚动平均值并不重要。