在数据帧中循环函数

2024-05-20 18:21:38 发布

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

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

(1)玩家及其等级的数据帧 (2) 按时间顺序排列的匹配数据帧

在数据库的比赛中,我想检索两个球员的评分,并应用两个函数(我已经定义了它们)预测的结果(评分1,评分2),和更新的评分(评分1,评分2)。第一个给了我比赛的预期结果给了评分,第二个给了我最新的评分。最后,我需要在播放器数据库中记录更新的评分。你知道吗

我想我要找的是一个一行一行的循环:

  • 在match dataframe的第一行,从
    播放器数据库
  • 运行两个函数
  • 用播放器中更新的等级替换旧等级 数据库。你知道吗

匹配数据帧

    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


Tags: 数据项目函数数据库玩家播放器评分del
1条回答
网友
1楼 · 发布于 2024-05-20 18:21:38

这里的主要问题似乎是ratings数据帧的无效格式。由于索引的目的是使按索引值访问行变得容易,因此如果将播放机名设置为索引,问题就会变得容易得多。因为我不知道评分是如何计算的,所以我假设赢了会提高评分一分,输了会降低评分一分。你知道吗

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

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)

我选择删除原来的“Player”列,因为它现在是多余的。基督教青年会。你知道吗

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

相关问题 更多 >