python - 如何在循环中更新数据框中的值?
问题描述
我正在尝试逐行更新评级。我有一个玩家数据框,它们都以相同的评分开始。对于每场比赛,我希望评分发生变化。另一个数据框包含每个匹配的结果。
import pandas as pd
gamesdata = [['paul','tom'],['paul','lisa'],['tom','paul'],['lisa','tom'],['paul','lisa'],['lisa','tom'],['paul','tom']]
games = pd.DataFrame(gamesdata, columns = ['Winner', 'Looser'])
playersdata= ['lisa','paul','tom']
players = pd.DataFrame(playersdata, columns = ['Name'])
mean_elo = 1000
elo_width = 400
k_factor = 64
players['elo'] = mean_elo
def update_elo(winner_elo, loser_elo):
expected_win = expected_result(winner_elo, loser_elo)
change_in_elo = k_factor * (1-expected_win)
winner_elo += change_in_elo
loser_elo -= change_in_elo
return winner_elo, loser_elo
def expected_result(elo_a, elo_b):
expect_a = 1.0/(1+10**((elo_b - elo_a)/elo_width))
return expect_a
for index, row in games.iterrows():
winnername = row['Winner']
losername = row['Looser']
web = players['elo'].loc[players['Name'] == winnername].values[0]
wIndex = players.loc[players['Name'] == winnername]
#I want to return just the index, so I can update the value
print(wIndex)
leb = players['elo'].loc[players['Name'] == losername].values[0]
print('Winner Elo before: ' + str(web))
winner_elo, looser_elo = update_elo(web, leb)
print('Winner Elo after: ' + str(winner_elo))
#here I want to update value
#players.at[wIndex,'elo']=winner_elo
我正在尝试使用更新玩家表中的值
players.at[wIndex,'elo']=winner_elo
但我很难用这段代码获得索引:
wIndex = players.loc[players['Name'] == winnername]
解决方案
找到了解决方案:
wIndex = players.loc[players['Name'] == winnername].index.values
不敢相信我错过了
推荐阅读
- vector - Rust - 如何从函数返回多个变量,以便在调用函数的范围之外可以访问它们?
- python - 位置 args 元组的索引 1 超出范围
- julia - 如何用 Julia 绘制球体?
- rust - HashMap 的 split_at_mut 等价物?
- php - Laravel 关系将列组合到逗号分隔的字符串
- html - 应用时无法获得所需的字体样式
- java - Jboss 从 EAP 6.3 迁移到 EAP 7.3 - 资源适配器不工作
- python-3.x - 已安装的 PILLOW 模块未识别为在 Python 3 中导入
- overpass-api - 如何在 OSMnx 图中包含汽车轮渡
- javascript - 有没有办法忽略 rxjs 管道内的计时器?