循环停止在预定的意思

问题描述:

Python新手!我对制表测验分数简单的数据帧:循环停止在预定的意思

df = pd.DataFrame({'Sam':[20,20,20,20,20], 'Jim': [20,20,20,20,15], 
'Stacy': [20,20,20,20,30], 'Leslie': [20,20,20,20,20], 'Jonathan': 
[20,20,20,20,15]}) 

现在,我想写的东西,改变每一列的顶部值(从0开始),直到它的相应平均值等于什么预定,然后移动到下一列。很容易添加一个新行,并手动完成,直到获得我想要的结果(如下所示)。但是,我正在寻找一些能够让程序在iloc字段中进行迭代的操作,以便获得预定义的'mean2'值。我想这会需要一些while循环,但无法弄清楚语法。代码下方最终所需结果的屏幕截图。谢谢!

df.loc['mean1'] = df.mean() 
df.iloc[0:1,0:5] = 17, 17, 22, 22, 22 
df.loc['mean2'] = df.iloc[:5,:].mean() 
df 

期望的最终数据帧的屏幕截图。

纠正我,如果我错了,但如果我重新制定你的问题:
你想要的是找到每个particiant(列)的第一次测验分数的值(df.loc [0]),将确保参与者有一个平均目标得分(mean2)?

如果它是你可以做一些类似的情况:

# a function that estimate the quiz value to have for obtaining mean score target 
def estimate_replace(quiz_id, mean_target, participant_series): 
    data = participant_series.loc[participant_series.index != quiz_id].values 
    participant_series['mean1'] = participant_series.mean() 
    participant_series['mean2'] = mean_target 

    # Here is the key function! 
    participant_series.loc[quiz_id] = mean_target*(len(data)+1) - data.sum() 
    return participant_series 

#mean2 : mean scores target per participant 
mean_score_target = {'Jim':18.4, 
        'Jonathan':18.4, 
        'Leslie':20.4, 
        'Sam':20.4, 
        'Stacy':22.4} 

#the quiz id to replace, 0 in your case 
quiz_id = 0 

df = df.apply(lambda x: estimate_replace(quiz_id,mean_score_target[x.name],x)) 

注意,该代码可以使用任意数量的测验值(行)和运作的,你可以指定竞猜值来估算/替换(quiz_id )。

你会然后得到以下的输出:

 Jim  Jonathan Leslie Sam Stacy 
0  17.0  17.0 22.0 22.0 22.0 
1  20.0  20.0 20.0 20.0 20.0 
2  20.0  20.0 20.0 20.0 20.0 
3  20.0  20.0 20.0 20.0 20.0 
4  15.0  15.0 20.0 20.0 30.0 
mean1 19.0  19.0 20.0 20.0 22.0 
mean2 18.4  18.4 20.4 20.4 22.4 
+0

欢迎你! –