我的项目:我正在为网球运动员创建一个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
我发现下面的答案表明了如何推销公式,但我遗漏了如何在播放器数据框架上保存更新的评级
答案 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