gpt4 book ai didi

python - pandas:两列的条件滚动和

转载 作者:行者123 更新时间:2023-12-01 02:32:31 27 4
gpt4 key购买 nike

我想计算衡量足球队势头的指标,在​​本例中是某支球队在过去 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

这只是一些巴塞罗那比赛的示例。所以基本上我想要得到的是另外两列(比如主场动量、客场动量),它将该特定球队在过去 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())

但这样做的问题是它没有考虑球队的客场比赛。

您有什么想法可以解决这个问题吗?

最佳答案

将列重命名为多索引。堆栈并运行滚动总和

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

关于python - pandas:两列的条件滚动和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46651408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com