Среднее значение выбранной строки в сгруппированном фрейме данных - PullRequest
0 голосов
/ 28 мая 2020

, не могли бы вы помочь мне в следующей ситуации? Я хочу сгруппировать по моей 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) 

Спасибо

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Можно сделать:

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
1 голос
/ 28 мая 2020

Если вы отсортируете по дате, вы можете затем сгруппировать все по Home и Season, а затем просто вычислить для него расширяющееся среднее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...