在Python中查找并比较一组数据中符合条件的最后一行和倒数第二行。

3
我有一个包含游戏数据的数据框。在这个游戏中,两名玩家会玩90分钟的比赛。但是由于各种原因,比赛可能持续时间超过90分钟。我想要找到在90分钟后玩家1获胜的比赛。因此,我想要比较比赛的结束得分: - 持续时间超过90分钟, - 玩家1获胜 与时间<90分钟的先前得分相比。

games dataframe
(来源:imggmi.com)

  # Games dataframe
  games = pd.DataFrame({'game_id': {0: 1,1: 1,2: 1,3: 2,4: 2,5: 3,6: 3,7: 
                     3,8: 4,9: 4,10: 4,11: 5,12: 5,13: 5},
                    'time': {0: 1,1: 45,2: 95,3: 56,4: 80,5: 1,6: 95,7: 
                     95,8: 96,9: 107,10: 108,11: 15,12: 95,13: 97},
                    'player 1': {0: 1,1: 1,2: 2,3: 1,4: 1,5: 0,6: 1,7: 2,8: 
                     0,9: 1,10: 2,11: 1,12: 1,13: 1},
                    'player 2': {0: 0,1: 1,2: 1,3: 0,4: 1,5: 1,6: 1,7: 1,8: 
                     1,9: 1,10: 1,11: 0,12: 1,13: 2}})

  # Find the rows with the ending scores of games
  a = games.drop_duplicates(["game_id"],keep='last')

  #Find games that player 1 wins and time>90
  b = games[((games["player 1"] - games["player 2"]) >0) (games["time"]>90)]

例如,在游戏1中,在第95分钟之前,比分还保持平局,但是第95分钟时,选手1获胜。总的来说,如果在90分钟之前两个选手打成平局,或者在90分钟后选手1处于落后状态,但最终情况是选手1获胜,我该如何过滤这种情况?

第三场比赛在第95分钟发生了什么?为什么同一分钟有两个条目? - natka_m
在同一分钟内,球员1打进了2个进球。 - Mine
1
我无法快速理解您试图做什么,但我认为您可能会发现有关重塑的教程很有帮助。 - natka_m
1个回答

2

编辑:这样怎么样?

endScores = games.loc[(games['time'] > 90) & (games['player 1'] > games['player 2'])].groupby('game_id').nth(-1)
beforeScores = games.loc[(games['time'] <= 90) & (games['player 1'] <= games['player 2'])].groupby('game_id').nth(-1)
compareGames = beforeScores.join(endScores, rsuffix='_end').dropna()

谢谢您的建议,但我正在寻找特定的情况。例如,如果在第90分钟之前玩家1处于领先地位,那么在第90分钟之后获胜就不是我想要的情况。我要找的情况是:1)如果比赛在90分钟标志之前是平局,在90分钟之后玩家1获胜。2)如果玩家1在90分钟标志之前处于落后状态,并在90分钟之后获胜。基本上,我正在寻找将最终得分与90分钟标志之前的得分进行比较并过滤符合我列出的条件的玩家1获胜的情况。 - Mine
Gabriel,这对大多数情况都很有效,但是对于game_id 4该怎么办呢?它没有在90分钟之前说明比分,因此我们认为它是0-0,但在第108分钟后,Player 1进球并获胜。这种情况也应添加到compareGames中。 - Mine
如果你把每场比赛的0-0分数相加,它应该能够运作。 - Gabriel B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接