根据前两列中的任一列更新每一行的值

时间:2019-03-08 08:39:42

标签: python pandas

我正在研究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'])

感谢您的宝贵时间!

1 个答案:

答案 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