【问题标题】:Python rolling sum taking data from to columnsPython滚动总和从列中获取数据
【发布时间】:2018-05-24 18:30:10
【问题描述】:

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

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

想法将不胜感激

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    【讨论】:

    • 嗨galaxian,逻辑和代码看起来都不错。然而,我的输出结果是这样的: Name Arsenal 59 NaN, 101 NaN, 186 NaN, 143 NaN, 197 NaN, 0 3.0, 11 3.0 请记住,原始数据要大得多。在第一个问题中,我只发布了我操纵的摘录,以便“阿森纳”更频繁地出现,人们可以了解我的问题背后的想法。所以在原始数据中“Arsenal”按以下顺序出现:0,11,29,30,34,45。然而,输出是完全混合的。我还将表格中的日期转换为日期时间,因为我知道这是常态。
    • @MartinYordanovGeorgiev 你的问题是什么?输出是混合的?
    • 是的,输出是混合的。 sort_values 函数似乎没有完成它的工作。无论如何感谢您的帮助。
    • 澄清一下——galaxyan 提供的代码非常好用。我的日期格式有问题,但一旦我修复它,一切都按预期工作。
    猜你喜欢
    • 2020-09-02
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2023-03-22
    相关资源
    最近更新 更多