如何得到连续的击球次数而不是一个标准的累积和?

2024-06-15 17:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,里面有游戏中每个用户的击球细节。这是斯诺克的数据集,所以一个球员把球扔到地上,一直打到他没打中为止,以此类推。 我需要计算玩家在游戏中连续击球的最高次数

以下是数据集

Game_id                       Player ID
5d6576aab80c990500e3ce5a        2ff211
5d6576aab80c990500e3ce5a        2ff250
5d6576aab80c990500e3ce5a        2ff211
5d6576aab80c990500e3ce5a        2ff211
     .  .   .                    ...

我找到了一个解决方案,可以使用累计和移位法来创建一个分组,但它能为你提供比赛中所有投篮的总和

# where f is the dataframe.
f['subgroup'] = (f['pSId'] != f['pSId'].shift(1)).cumsum()
f.groupby('subgroup',as_index=False).apply(lambda x: (x['pSId'].head(1), x.shape[0]))

对于每一个游戏ID,我需要得到一个球员在不给下一个球员机会的情况下最大的投篮次数如何获得连续的击球次数而不是标准的累积和?

结果应该是this:- 你知道吗

Game_id                    Player ID    Maximum Continuous Shots
5d6576aab80c990500e3ce5a    2ff211        5
5d6576aab80c990500e3ce5a    2ff250        2
5d6576aa35c80305060c4a32    2f7a5b        5
5d6576aa35c80305060c4a32    2f0847        6

Tags: 数据用户idgame游戏玩家解决方案次数
1条回答
网友
1楼 · 发布于 2024-06-15 17:40:59

您可以这样做:

df['Streak'] =df['Player ID'].groupby((df['Player ID'] != df['Player ID'].shift()).cumsum()).cumcount() + 1

df.head()

                    Game_id Player ID  Streak
0  5d6576aab80c990500e3ce5a    2ff211       1
1  5d6576aab80c990500e3ce5a    2ff250       1
2  5d6576aab80c990500e3ce5a    2ff211       1
3  5d6576aab80c990500e3ce5a    2ff211       2
4  5d6576aab80c990500e3ce5a    2ff211       3

然后分组,得到最大值:

df.groupby(['Game_id','Player ID']).max().reset_index()

                    Game_id Player ID  Streak
0  5d6576aa35c80305060c4a32    2f0847       6
1  5d6576aa35c80305060c4a32    2f7a5b       5
2  5d6576aab80c990500e3ce5a    2ff211       5
3  5d6576aab80c990500e3ce5a    2ff250       2

您也可以查看这篇文章: https://predictivehacks.com/count-the-consecutive-events-in-python/

相关问题 更多 >