我正在研究ATP Tour男子网球数据。目前,我有一个包含约60,000个匹配项的Pandas数据框。每行都包含有关比赛的信息/统计信息,分为获胜者和输者。我已经按日期对数据框进行了排序。目前,我正在尝试计算每次比赛(因此每一行)获胜者和失败者的ELO评分。 为了计算ELO评分,一个人需要他们先前比赛中的两名球员的ELO评分。出现另一个困难,因为当前比赛的获胜者可能是他先前比赛的输家。结果,当前比赛的“ winner_player_id”值可能在上一场比赛的“ loser_player_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'])
感谢您的宝贵时间!
答案 0 :(得分:0)
一种方法是按玩家姓名/ 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