基于前两列中的任一列更新每行的值

2024-05-20 00:38:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究ATP巡回赛男子网球数据。目前,我有一个熊猫数据帧,包含约60000个匹配。每一行都包含有关比赛的信息/统计信息,分为胜负两部分。我已按日期对数据帧进行了排序。目前我正在尝试计算每场比赛(因此是每一排)的胜负双方的ELO评分。 要计算ELO等级,需要两个球员在上一场比赛中的ELO等级。另一个困难出现了,因为本场比赛的胜利者可能是上一场比赛的失败者。因此,当前比赛的'winner\u player\u id'值可能位于上一场比赛的'lowers\u player\u id'列中。你知道吗

我不知道如何有效地为每一行的两个玩家选择以前的ELO评分,因为这需要跨多个列进行搜索。你知道吗

每行包括以下列:

array(['match_id', 'tourney_dates', 'round_order', 'tourney_name',
   'tourney_year_id', 'tourney_round_name', 'winner_player_id',
   'winner_slug', 'loser_player_id', 'loser_slug', 'elo_player_1', 'elo_player_2'])

感谢您的时间!你知道吗


Tags: 数据name信息id评分playersluground
1条回答
网友
1楼 · 发布于 2024-05-20 00:38:47

一种方法是按玩家名称/ID对每一行的赢家和输家进行排序,这样无论谁赢谁输,顺序都是稳定的。举个例子:

df.join(pd.DataFrame(
    np.sort(df[['winner_name', 'loser_name']].values, axis=1),
    columns=['name1', 'name2']))

df.head(10)

输出:

      winner_name         loser_name              name1          name2
0   Nicklas Kulti      Michael Stich      Michael Stich  Nicklas Kulti
1   Michael Stich        Jim Courier        Jim Courier  Michael Stich
2   Nicklas Kulti     Magnus Larsson     Magnus Larsson  Nicklas Kulti
3     Jim Courier      Martin Sinner        Jim Courier  Martin Sinner
4   Michael Stich        Jimmy Arias        Jimmy Arias  Michael Stich
5   Nicklas Kulti    Fabrice Santoro    Fabrice Santoro  Nicklas Kulti
6  Magnus Larsson      Patrik Kuhnen     Magnus Larsson  Patrik Kuhnen
7     Jim Courier      Paul Haarhuis        Jim Courier  Paul Haarhuis
8   Nicklas Kulti  Magnus Gustafsson  Magnus Gustafsson  Nicklas Kulti
9   Michael Stich        Gilad Bloom        Gilad Bloom  Michael Stich

相关问题 更多 >