循环数据框中的函数

时间:2015-06-02 19:37:47

标签: python loops numpy pandas dataframe

我的项目:我正在为网球运动员创建一个elo评分,我有两个不同的数据框。

(1)具有评级的玩家的数据框 (2)按时间顺序排列的匹配数据框

在匹配数据库上工作我想要检索两个玩家的评级并应用两个函数(我已经定义了它们)predict_result(rating1,rating2)和updated_rating(rating1,rating2)。第一个给出了给定评级的匹配的预期结果,第二个给了我更新的评级。最后,我需要在播放器数据库中记录更新的评级。

我认为我正在寻找的是一个逐行的循环:

    匹配数据帧第一行的
  • 从中检索评级 玩家数据库
  • 运行两个功能
  • 将旧评级替换为播放器中的更新评级 数据库中。

匹配数据框

    Winner    Loser   
0   Nadal     Federer   
1   Djokovic  Verdasco   
2   Nadal     Djokovic  
3   Del Potro Verdasco 

播放器数据帧

    Player  Rating   
0   Nadal     2320   
1   Djokovic  2280   
2   Verdasco  2120
3   Federer   1890     
4   Del potro 1542 

我发现下面的答案表明了如何推销公式,但我遗漏了如何在播放器数据框架上保存更新的评级

Rolling a function on a data frame

1 个答案:

答案 0 :(得分:0)

这里的主要问题似乎是ratings DataFrame的无用格式。由于索引的目的是通过索引值轻松访问行,因此如果将播放器命名为索引,则问题变得更加容易。由于我不知道收视率是如何计算的,所以我认为获胜会将评分提高一个点,而失败则会将评级降低一个。

首先,我确保使用与您相同的数据:)

In [154]: ratings
Out[154]:
      Player  Rating
0      Nadal    2320
1   Djokovic    2280
2   Verdasco    2120
3    Federer    1890
4  Del Potro    1542

In [155]: results
Out[155]:
      Winner     Loser
0      Nadal   Federer
1   Djokovic  Verdasco
2      Nadal  Djokovic
3  Del Potro  Verdasco

接下来,我以玩家作为索引制作评级表的副本。

In [156]: ir = ratings.set_index(ratings["Player"].values)

我选择删除原来的“播放器”列,因为它现在是多余的。 YMMV。

In [157]: del ir["Player"]

In [158]: ir
Out[158]:
           Rating
Nadal        2320
Djokovic     2280
Verdasco     2120
Federer      1890
Del Potro    1542

您可以遍历results表中的每一列:

In [159]: for row in results["Winner"]:
   .....:         print(row)
   .....:
Nadal
Djokovic
Nadal
Del Potro

所以现在只需更新您的评分即可:

In [160]: for row in results["Winner"]:
   .....:         ir['Rating'][row] += 1
   .....:

In [161]: for row in results["Loser"]:
   .....:         ir['Rating'][row] -= 1
   .....:

In [162]: ir
Out[162]:
           Rating
Nadal        2322
Djokovic     2280
Verdasco     2118
Federer      1889
Del Potro    1543