循环停止在预定的意思
问题描述:
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
欢迎你! –