我试图计算每个球队在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/

10-12 16:50