Скользящая сумма Python, принимающая данные в столбцы - PullRequest
0 голосов
/ 24 мая 2018

Ниже приведена часть информационного блока, состоящего из результатов футбольных игр.

FTHG означает «Голы на полную ставку»

FTAG означает «Голы на полную ставку»

  Date       HomeTeam    AwayTeam      FTHG    FTAG    FTR
14/08/93    Arsenal    Coventry       0       3      A
14/08/93    Aston Villa   QPR         4       1      H
16/08/93    Tottenham   Arsenal       0       1      A
17/08/93    Everton    Man City       1       0      H
21/08/93    QPR     Southampton       2       1      H
21/08/93    Sheffield   Arsenal       0       1      A
24/08/93    Arsenal      Leeds        2       1      H
24/08/93    Man City    Blackburn     0       2      A
28/08/93    Arsenal     Everton       2       0      H

Я хочу создать код на python, который будет вычислять скользящую сумму (например, 3) голов, забитых каждой командой, независимо от того, была ли команда дома или посетителем.Метод groupby выполняет половину работы.Скажем, «a» - это переменная, а «df» - это фрейм данных

a = df.groupby("HomeTeam")["FTHG"].rolling(3).sum()    

Результат будет примерно таким:

         FTHG   
Arsenal  NaN
         NaN
         4.0
        .....

Однако я хотел бы, чтобы код учитывал такжеГолы, когда Арсенал был в гостях у команды.Соответственно, чтобы создать столбец (он должен называться не FTHG, а новым столбцом)

Arsenal  NaN
         NaN
         2
         4
         5

Идеи будут высоко оценены

1 Ответ

0 голосов
/ 24 мая 2018

вы можете объединить эти столбцы вместе, а затем применить groupby

tmp1 = df[['Date','HomeTeam', 'FTHG']]
tmp2 = df[['Date','AwayTeam', 'FTAG']]
tmp1.columns =  ['Date','name', 'score']
tmp2.columns =  ['Date','name', 'score']
tmp = pd.concat([tmp1,tmp2])
tmp.sort_values(by='Date').groupby("name")["score"].rolling(3).sum()   


name          
Arsenal      0    NaN
             2    NaN
             5    2.0
             6    4.0
             8    5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...