我正在尝试修改pandas数据帧,以便在每一行中,SdLog
列和Meanlog
列得到更新,直到第三列,std
小于std_o
的一半。我正在计算循环中的值,并每次减少sdLog
,直到计算值达到50%左右
for index, row in sf.iterrows():
while sf.loc[index,'std'] > row['std_o']/2:
z = row['Sdlog']
sf.loc[index, "Sdlog"] = row['Sdlog'] - 0.0001
sf.loc[index, "Meanlog"] = row['Meanlog'] + (z**2)/2 - (row['Sdlog']**2)/2
sf.loc[index, "std"] = ((np.exp((row['Sdlog']**2))-1)*(np.exp(2*(row['Meanlog'])+((row['Sdlog'])**2))))**(.5)
print(row, row['std']/row['std_o'])
这能加速吗?这条路对吗?我非常感谢您的帮助
我的数据框看起来像这样
Activity Equipment Meanlog Sdlog shiftindex actual_values std mean std_o mean_o
0 Load CF24 5.83 0.1995 364060 354.779340 69.998462 347.234380 70.147167 347.234380
1 Spot CF24 3.34 0.6100 364060 61.521021 22.820515 33.989444 22.820515 33.989444
2 Load CF24 6.33 0.1500 364070 538.410033 85.606872 567.505250 85.606872 567.505250
3 Spot CF24 3.45 0.3200 364070 24.901455 10.887160 33.155214 10.887160 33.155214
4 Load CF24 6.04 0.2500 364080 387.610354 110.019983 433.221871 110.019983 433.221871
这是我(在样本上)测试的内容:
请注意,我只使用了小样本,并没有真正检查结果是否正确
据我所知,您的代码不仅速度慢,而且会永久地卡在
while
循环中,因为相关变量在每次迭代中实际上没有改变。(更改sf
中的值,但不更改当前row
中的值。)您可以将逻辑移动到一个函数,然后应用到每一行:这是可行的,但速度很慢。其他人可能会提出优化建议
编辑:只需将数学逻辑与写入每行的代码分离,就可以大大加快速度
看看这样写的算法,我想你可以通过从一个大的
ch
开始,每次超过s
的期望值大约so/2
来进一步加速它相关问题 更多 >
编程相关推荐