如果与python中的条件匹配,则查找并比较组中的最后一行和之前的行

时间:2019-10-15 07:15:40

标签: python pandas dataframe comparison

我有一个包含游戏数据的数据框。对于这个游戏,2个玩家玩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,玩家1在分数达到第95分钟之前获胜。总的来说,如果情况是第90分钟之前2位玩家之间平局,或者玩家1输了,但在90分钟之后,最终情况就是玩家1获胜。如何过滤这种情况?

1 个答案:

答案 0 :(得分: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()