Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在函数调用之间重置可变全局数据帧_Python_Pandas_Dataframe_Global Variables_Mutable - Fatal编程技术网

python在函数调用之间重置可变全局数据帧

python在函数调用之间重置可变全局数据帧,python,pandas,dataframe,global-variables,mutable,Python,Pandas,Dataframe,Global Variables,Mutable,我有两个数据帧,“匹配度”和“评级度”。matches数据框存储两人游戏的玩家、日期和比赛赢家。评级数据框存储每个玩家的当前评级,从任意值开始。我想更新此帧,然后再重置它 matches_df date | player_1 | player_2 | winner 1/11 'A' 'B' 'A' 2/11 'C' 'B' 'C' 3/11 'A' 'D' 'A' 4/11 'A'

我有两个数据帧,“匹配度”和“评级度”。matches数据框存储两人游戏的玩家、日期和比赛赢家。评级数据框存储每个玩家的当前评级,从任意值开始。我想更新此帧,然后再重置它

matches_df

date | player_1 | player_2 | winner
1/11    'A'         'B'        'A'
2/11    'C'         'B'        'C'
3/11    'A'         'D'        'A'
4/11    'A'         'C'        'C'

ratings_df

player | rating
'A'       1000
'B'       1000
'C'       1000
'D'       1000
我有一个算法更新评级,它执行以下操作(sudocode)

我想比较模型预测精度中不同参数值的性能。然而,我正在努力复制“评级”数据框,或者在函数调用之间重置评级数据框。我使用以下代码计算给定参数值的性能:

def calc_brier(parameter,matches_df):
    #reset dataframe to initial values (1000 for all players)
    start_ratings = np.repeat(1000.0,len(unique_players))
    ratings_df = pd.DataFrame(data=[start_ratings],columns=unique_players)
    brier = 0
    for index, row in matches_df.iterrows():
        brier += update_ratings(row,parameter)
    return brier

然而,这并不能给出正确的结果。调用“calc_brier”函数时不会重置全局评级数据框,因此,如果使用相同参数多次调用,则我的calc_brier函数不一致。在调用“calc_brier”之前/之后,我应该如何正确重置全局评级数据框,或者使用替代结构来实现比较不同参数值的性能的最终目标?

如果我使用字典而不是数据框来存储评级,那么它是有效的。这是一个有效的版本(ratings df现在是一个字典,名称作为键,等级作为值,从1000开始)。不确定原始代码出了什么问题

def calc_brier(parameter):
    for player in unique_players:
        ratings_dict[player]=1000.0
    brier = 0
    for index, row in matches_df.iterrows():
        brier += update_ratings(row,k_factor)
    return brier
def calc_brier(parameter):
    for player in unique_players:
        ratings_dict[player]=1000.0
    brier = 0
    for index, row in matches_df.iterrows():
        brier += update_ratings(row,k_factor)
    return brier