У меня есть набор данных истории матчей, и я хочу найти новейшую версию для игроков. Я работаю с python & pandas, и пример набора данных таков:
tournament_date winner_id loser_id winner_elo loser_elo winner_delta loser_delta other_columns
----------------- ------------ ---------- ------------- ------------ -------------- --------------- ---------------
2017-08-24 512 543 1128 1102 6 -6 ...
2017-08-24 100 517 1153 1062 0.4 -0.4 ...
2017-08-24 512 547 1128 1114 3.4 -3.4 ...
2017-08-24 543 517 1102 1062 4.8 -4.8 ...
2017-08-24 547 100 1114 1153 11.2 -11.2 ...
2017-08-24 517 512 1062 1128 9.9 -9.9 ...
2017-08-24 543 100 1102 1153 9.1 -9.1 ...
2017-08-24 517 547 1062 1114 9.1 -9.1 ...
2017-08-26 543 517 1103 1089 5.2 -5.2 ...
2017-08-26 547 551 1119 1165 8.8 -8.8 ...
2017-08-26 543 557 1103 1214 8.5 -8.5 ...
2017-08-26 551 517 1165 1089 1 -1 ...
2017-08-26 557 547 1089 1119 7.8 -7.8 ...
2017-08-26 551 543 1165 1103 3 -3 ...
winner_elo и loser_elo ежедневно обновляются в моем наборе данных, но для каждого совпадения есть столбец для дельты изменить для победителей и проигравших.
Я хочу найти самую последнюю запись для каждого player_id (либо в winner_id, либо в loser_id), и если в столбце winner_id нужно выполнить winner_elo + winner_delta, чтобы найти обновленное elo или, если последний экземпляр игрока находится в столбце loser_id для расчета loser_elo + loser_delta.
Существует около 1000 уникальных идентификаторов игроков (500 уникальных winner_id и 508 loser_id). Я попытался сгруппировать по winner_id, отсортировать по дате и получить максимальное значение и аналогичным образом сгруппировать по loser_id и отсортировать по дате, но я не знаю, как их сравнить и выяснить, какой из них является последним, а затем выполнить требуемый расчет.
Я могу думать только о решениях, которые включают циклы, и если это так, но я думаю, что должен быть лучший способ
Редактировать: это часть проекта веб-очистки, и я ежедневно получаю новые данные поэтому я бы предпочел решение, которое подходит для новых записей