0

我有一些足球数据正在修改以供分析。我基本上想每周计算几个统计数据的职业生涯和每年每场比赛的平均值。

例子

我有的:

播放器 星期 冲场 抓住
塞思·约翰逊 2020 1 100 4
塞思·约翰逊 2020 2 80 2
塞思·约翰逊 2021 1 50 3
塞思·约翰逊 2021 2 50 2

我想要的是:

播放器 星期 冲场 抓住 每场比赛的职业冲球码数 职业生涯场均接球数 每年每场比赛的冲球码数 每场比赛的年捕获量
塞思·约翰逊 2020 1 100 4 100 4 100 4
塞思·约翰逊 2020 2 80 2 90 3 90 3
塞思·约翰逊 2021 1 50 3 76.67 3 50 3
塞思·约翰逊 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() 制作适当的自定义窗口所需的创造力。有人在这里有什么想法吗?

4

1 回答 1

0

下面的代码有点复杂,但它可以完成工作。

df = pd.DataFrame(lst, columns=["Player","Year","Week","Rushing Yards","Catches"])
df[['Weekly Rushing Yards','Weekly Catches']] = (df[["Rushing Yards","Catches"]].cumsum()
                                                 .divide(df.index+1, axis=0))

df_lst = []
for year in df['Year'].unique():
    df0 = df.loc[df['Year']==year,["Rushing Yards","Catches"]].reset_index()
    df0[['Yearly Rushing Yards','Yearly Catches']] = (df0[["Rushing Yards","Catches"]].cumsum()
                                                      .divide(df0.index+1, axis=0))
    df_lst.append(df0[['Yearly Rushing Yards','Yearly Catches']])

df[['Yearly Rushing Yards','Yearly Catches']] = pd.concat(df_lst).reset_index().drop('index', axis=1)

基本上,不使用任何mean方法,而是使用cumsum方法并除以数据帧的索引。

于 2021-11-29T20:24:36.593 回答