【问题标题】:Setting alternative minimum and maximum parameters设置替代的最小和最大参数
【发布时间】:2021-11-19 12:01:31
【问题描述】:

我有以下数据框:

    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 中的值的基础,但我认为有一种方法可以将此函数与“增长率”和“结果”列一起使用。

与此同时,我正在尝试探索以下 2 种可能的解决方案,但我不太确定如何使它们发挥作用。有什么建议吗?

这是第一个解决方案:

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)

【问题讨论】:

  • 这个的预期输出是什么?
  • 是的,你想做什么,插入调整温度的新行?只需检查与您的无生长和温度条件匹配的行后面的行是否遵循您的温度调整?
  • 如果有机体在较低温度 (14°C) 下没有生长,则报告为零。在这种情况下,在模型拟合中定义 Tmin 时,将参数约束为等于或大于 14°C 且小于 18°C(这是具有正增长率的下一个温度处理)。如果有机体没有在最高温度(34°C)下生长,则报告为零。在这种情况下,在模型中定义 Tmax 时,将参数约束为等于或小于 34°C 且大于 30°C(这是具有正增长率的下一个温度处理)。
  • @SamColeman 您在哪里/如何定义这些 Tmin 和 Tmax?那是您似乎想要的输出,但您没有在问题中提及它们
  • 很难理解你想要做什么。我认为你应该用一个预期输出的例子来重写你的问题。

标签: python pandas boolean max min


【解决方案1】:

此函数将最小值、最大值更改为所需的最小值、最大值:

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)

【讨论】:

  • 嗯,我想我明白你在这里得到了什么,但我想以一种也考虑“增长率”(而不是“结果”,我与研究员澄清)。所以当我尝试它时,我得到了 18 和 30 的两个副本(所以 18 是 14 和 30 是 34)。我可能会更多地使用这个陈述作为一个双重检查假设作为绘图的基础,而不是修改数据框,尽管考虑到温度谱的低端已经有增长(14),但不是高端(34),我想尽可能将其纳入我的工作中。
  • 对不起,我错误地给出了结果而不是增长。一开始,我已经为增长率创造了。你能澄清一下这有什么问题以及你想要什么吗?
  • 因此,当我尝试您建议的代码并调用 df 时,我得到了与下面的 df 完全不同的输出:``` 温度增长率标准错误权重结果交替增长率 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 0.897 5 34.0 0.000 0.000 0.000 0.000 0```所以14和34都被替换为18和30,这意味着我得到重复。理想情况下,我想设置一个具有这些约束的函数,我可以将其应用于我的最终曲线拟合。
  • 好的,所以我想我找到了一种设置函数的方法:``` def alt_temp_limit(temp, growth_rate, low_temp, high_temp): for value in temp: if growth_rate in low_temp = = 0: low_temp >= 14 & low_temp 30 else: high_temp = 34 return temp ``` 现在我想找到一种将此函数相应地应用于我的最终曲线拟合的方法,但我不知道创建一个新的 df 列是否是一个实际的步骤。
  • 这是我到目前为止尝试过的:``` df2['Altered Parameters'] = df2[['Temperature', 'Growth rate']].apply(alt_temp_limit, axis = 1)类型错误:alt_temp_limit() 缺少 3 个必需的位置参数:“growth_rate”、“low_temp”和“high_temp”```
猜你喜欢
  • 2022-12-18
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2019-07-09
相关资源
最近更新 更多