以下是数据框的一部分,其中包含足球比赛结果。
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
将非常感谢您的想法
答案 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