【问题标题】:Mean of the selected row in grouped dataframe分组数据框中所选行的平均值
【发布时间】:2020-09-15 23:23:27
【问题描述】:

您能帮我解决以下情况吗?我想根据球队和赛季对我的 df 进行分组,然后我想获得直到比赛日期的进球数的平均值。我考虑过使用rolling,但我不知道如何使用,因为每一行都会有所不同。

DF:

Date      Home   Away    Season  Home_goals  Away_goals         
1.1.2019  Team 1 Team 2  2019    1           1
2.1.2019  Team 3 Team 4  2019    2           3
3.1.2019  Team 1 Team 3  2019    2           1  
2.1.2020  Team 1 Team 4  2020    3           4
4.1.2019  Team 1 Team 5  2019    1           3

预期输出:

Date      Home   Away    Season  Home_goals  Away_goals  Mean_home_goals       
1.1.2019  Team 1 Team 2  2019    1           1           1
2.1.2019  Team 3 Team 4  2019    2           3           2
3.1.2019  Team 1 Team 3  2019    2           1           1.5((1+3)/2)  
2.1.2020  Team 1 Team 4  2020    3           4           3 (its new season)
4.1.2019  Team 1 Team 5  2019    1           3           1.33 ((1+3+1)/3) 

谢谢

【问题讨论】:

  • 第 3 行的 Home_goals2 还是 3

标签: pandas group-by apply


【解决方案1】:

如果您按日期排序,则可以将所有内容按HomeSeason 分组,然后计算其扩展平均值:

In [327]: df.sort_values("Date").groupby(["Home", "Season"])["Home_goals"].expanding().mean()
Out[327]:
Home    Season
Team 1  2019    0    1.000000
                2    1.500000
                4    1.333333
        2020    3    3.000000
Team 3  2019    1    2.000000
Name: Home_goals, dtype: float64

【讨论】:

    【解决方案2】:

    你可以这样做:

    groups = df.groupby(['Home','Season'])['Home_goals']
    df['Mean_home_goalds'] = groups.cumsum()/groups.cumcount().add(1)
    

    输出:

           Date    Home    Away  Season  Home_goals  Away_goals  Mean_home_goalds
    0  1.1.2019  Team 1  Team 2    2019           1           1          1.000000
    1  2.1.2019  Team 3  Team 4    2019           2           3          2.000000
    2  3.1.2019  Team 1  Team 3    2019           2           1          1.500000
    3  2.1.2020  Team 1  Team 4    2020           3           4          3.000000
    4  4.1.2019  Team 1  Team 5    2019           1           3          1.333333
    

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 2021-12-02
      • 2016-03-03
      • 2018-02-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      相关资源
      最近更新 更多