Как найти последний экземпляр между двумя столбцами и получить значение из другого столбца для этого экземпляра? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть набор данных истории матчей, и я хочу найти новейшую версию для игроков. Я работаю с 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 и отсортировать по дате, но я не знаю, как их сравнить и выяснить, какой из них является последним, а затем выполнить требуемый расчет.

Я могу думать только о решениях, которые включают циклы, и если это так, но я думаю, что должен быть лучший способ

Редактировать: это часть проекта веб-очистки, и я ежедневно получаю новые данные поэтому я бы предпочел решение, которое подходит для новых записей

1 Ответ

0 голосов
/ 23 марта 2020

Я бы атаковал это, разбив фрейм данных на две части: отбросив данные о неудачниках из одного, данные о победителях из другого, и переименовав столбцы просто в «id». "Эло" и "Дельта". Просто объедините два фрейма, отсортируйте по дате (самый последний первый) и groupby идентификатор игрока.

Теперь для каждого игрока просто снимите верхнюю (самую последнюю) строку и примените ее, чтобы получить текущий рейтинг.

...