2017-10-09 79 views
1

我想計算一下足球隊勢頭的衡量標準,在這種情況下,某個球隊在過去的3場比賽中得分。我的數據如下:熊貓:兩欄的有條件滾動總和

HomeTeam AwayTeam H_Pts A_Pts 
    Barcelona Getafe  3  0 
    Levante  Barcelona 1  1 
    Barcelona Las Palmas 3  0 
    Las Palmas Barcelona 3  0 
    Barcelona Madrid  1  1 

這只是一些巴塞羅那比賽的樣本。所以基本上我最終想要得到的是兩個額外的欄目(比如Home_Momentum,Away_Momentum),它將這個特定團隊在最近3場比賽中獲得的積分加起來(不包括當前比賽)。因此,它應該是這個樣子:

HomeTeam AwayTeam H_Pts A_Pts Home_Momentum Away_Momentum 
    Barcelona Getafe  3  0  NaN    NaN 
    Levante  Barcelona 1  1  NaN    NaN 
    Barcelona Las Palmas 3  0  NaN    NaN 
    Las Palmas Barcelona 3  0  x    7  
    Barcelona Madrid  1  1  4    y 

其中X(Y)是拉斯帕爾馬斯(馬德里)收集在其最近3場分總和。

我想出到目前爲止是:

data["Home_Momentum"] = data.groupby("HomeTeam")["H_Pts"].apply(lambda x: x.rolling(3).sum().shift()) 

但這樣做的問題是,它不考慮球隊的客場比賽。

你有什麼想法如何解決這個問題?

回答

1

將列重命名爲多指數。堆棧和運行滾動總和

df.columns = [ 
    ['Team', 'Team', 'Points', 'Points'], 
    ['Home', 'Away', 'Home', 'Away'] 
] 

d1 = df.stack() 

mom = d1.groupby('Team').Points.apply(lambda x: x.shift().rolling(3).sum()) 

d1.assign(Momentum=mom).unstack() 

    Points    Team    Momentum  
    Away Home  Away  Home  Away Home 
0  0 3  Getafe Barcelona  NaN NaN 
1  1 1 Barcelona  Levante  NaN NaN 
2  0 3 Las Palmas Barcelona  NaN NaN 
3  0 3 Barcelona Las Palmas  7.0 NaN 
4  1 1  Madrid Barcelona  NaN 4.0 

我們可以包括在幾場比賽比3金額爲好。

df.columns = [ 
    ['Team', 'Team', 'Points', 'Points'], 
    ['Home', 'Away', 'Home', 'Away'] 
] 

d1 = df.stack() 

mom = d1.groupby('Team').Points.apply(lambda x: x.shift().rolling(3, 1).sum()) 

d1.assign(Momentum=mom).unstack() 

    Points    Team    Momentum  
    Away Home  Away  Home  Away Home 
0  0 3  Getafe Barcelona  NaN NaN 
1  1 1 Barcelona  Levante  3.0 NaN 
2  0 3 Las Palmas Barcelona  NaN 4.0 
3  0 3 Barcelona Las Palmas  7.0 0.0 
4  1 1  Madrid Barcelona  NaN 4.0 
+0

這很好,謝謝! – Konninger