Python滚动总和将数据从列中取出

时间:2018-05-24 18:30:10

标签: python pandas

以下是数据框的一部分,其中包含足球比赛结果。

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 :(得分:0)

您可以将这些列组合在一起,然后应用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