Найдите и сравните последний и предыдущий ряд в группе, если он соответствует критериям в python - PullRequest
3 голосов
/ 15 октября 2019

У меня есть фрейм данных, который содержит игровые данные. В этой игре 2 игрока играют 90 минут. Однако игра может длиться более 90 минут по разным причинам. Я хочу найти игры, в которых игрок 1 выиграл после 90-й минуты. Поэтому я хотел бы сравнить итоговый счет для игры, которая: - длилась более 90 минут, - игрок 1 выиграл с предыдущим счетом за время <90 минут. </p>

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-й минуте до того, как счет стал равным,В целом, если ситуация была ничьей между 2 игроками до 90-й минуты, или Игрок 1 проигрывал, но после 90-минутной отметки, финальная ситуация такова, что Игрок 1 выиграл. Как я могу отфильтровать это дело?

1 Ответ

2 голосов
/ 15 октября 2019

Редактировать: Как насчет этого?

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...