设置可选的最小和最大参数



我有以下数据框架:

Temperature Growth rate Standard Error  Weight  Result
0   14.0        0.363       0.110           9.091   0.000
1   18.0        0.677       0.043           23.256  0.767
2   22.0        0.822       0.044           22.727  0.975
3   26.0        0.936       0.073           13.699  0.975
4   30.0        0.897       0.051           19.608  0.767
5   34.0        0.000       0.000           0.000   0.000

我试图用它来建立一个函数或if循环,基本上说如果藻类不能在14的最低温度或34的最高温度下生长,那么下一个可用于正生长的最小参数(即高于0)应该小于或等于18且大于14,下一个最大值大于或等于30且小于34。我的想法是,我是否应该在df中生成一个考虑到这个的新列,或者我是否应该不考虑给定的值而这样做。我期望产生的最终输出是采用优化参数值(本质上是散点样式的图)的曲线拟合,并根据更新或建模的增长率(标记为"结果")测量温度。

下面是我如何设置初始参数的:
def boatman_temperature_function(temp, max_growth_rate, min_temp, temp_range, skewness, kurtosis):
num = temp - min_temp
denom = temp_range - min_temp  # temp_range is the maximum temperature
inside_sin = np.pi*((num/denom)**skewness)
sin_result = np.sin(inside_sin) # TODO: numpy.sin input: radian? degree?
final = max_growth_rate*(sin_result**kurtosis)
return(final)

这被设计成一个假设,而不是我在df中的值的基础,但我认为有一种方法可以将这个函数与"增长率"one_answers"结果"列一起使用。

与此同时,我正在尝试探索以下两种可能的解决方案,但我不太确定如何使它们起作用。有什么建议吗?这是第一个解决方案:

for value in df2:
if df2['Temperature'].min() == 14 & df2['Growth rate'] == 0:
df2['Temperature'].min() <= 18
if df2['Temperature'].max() == 34 & df2['Growth rate'] == 0:
df2['Temperature'].max() >= 30 
TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]

第二个:

def min_and_max_alts(temp, growth_rate, alternate):
df2[alternate] = np.where((df2[temp].min() == 14 & df2[growth_rate] == 0), df2[temp].max() == 34 & df2[growth_rate] == 0)
return df2
df2 = min_and_max_alts('Temperature','Growth rate','Alternate growth rate')
df2
TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool] (basically same result as the first attempted solution)

此函数将min, max更改为所需的min, max值:

def change_temp(row,value_for_min,value_for_max):
T,R=row[0],row[1]
if R==0:
if T==14:
T=value_for_min
print(f"Min value changed as {value_for_min}")
elif T==34:
T=value_for_max
print(f"Max value changed as {value_for_max}")
return T
DF["Temperature"]=DF[["Temperature","Growth"]].apply(lambda row: change_temp(row,18,30),axis=1)

最新更新