我有以下数据框架:
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)