在 python 中创建一个带有“while”循环的函数,并使用该函数在数据框中生成一个新列

保罗

我试图在 Python 中用“while”创建一个新函数。

def pmv_calculator(ta, tr, vel, rh, met, clo, wme):
pa = rh * 10 * np.exp(16.6536 - 4030.183 / (ta + 235))
icl = 0.155 * clo
m = met * 58.15
w = wme * 58.15
mw = m - w
if icl <= 0.078:
    fcl = 1 + (1.29 * icl)
else:
    fcl = 1.05 + (0.645 * icl)

hcf = 12.1 * np.sqrt(vel)
taa = ta + 273
tra = tr + 273
tcla = taa + (35.5 - ta) / (3.5 * icl + 0.1)

p1 = icl * fcl
p2 = p1 * 3.96
p3 = p1 * 100
p4 = p1 * taa
p5 = 308.7 - 0.028 * mw + p2 * np.power(tra / 100, 4)
xn = tcla / 100
xf = tcla / 50
eps = 0.00015
hc = 0

n = 0
while abs(xn - xf) > eps:
    xf = (xf + xn) / 2
    hcn = 2.38 * np.power(abs(100.0 * xf - taa), 0.25)
    if hcf > hcn:
        hc = hcf
    else:
        hc = hcn
    xn = (p5 + p4 * hc - p2 * np.power(xf, 4)) / (100 + p3 * hc)
    n += 1
    if n > 150:
        print('Max iteration exceeded')
        break

tcl = 100 * xn - 273
h11 = 3.05 * 0.001 * (5733 - (6.99 * mw) - pa)
if mw > 58.15:
    h12 = 0.42 * (mw - 58.15)
else:
    h12 = 0
h13 = 1.7 * 0.00001 * m * (5867 - pa)
h14 = 0.0014 * m * (34 - ta)
h15 = 3.96 * fcl * (np.power(xn, 4) - np.power(tra / 100, 4))
h16 = fcl * hc * (tcl - ta)
ts = 0.303 * np.exp(-0.036 * m) + 0.028
pmv = ts * (mw - h11 - h12 - h13 - h14 - h15 - h16)

return pmv

然后使用此函数在我的数据框中生成另一列。

df['PMV'] = pmv_calculator(df['temp'], df['temp'], 0.1, 22, 1.1, 1, 0)

但它给了我以下错误:

文件“C:/P.py”,第 119 行,在 df['PMV'] = pmv_calculator(df['temp'], df['temp'], Air_Speed, 22, Metabolic_Rate, Clothing, 0) 文件“C :/P.py",第 83 行,在 pmv_calculator while abs(xn - xf) > eps: 文件 "C:\PA\venv\lib\site-packages\pandas\core\generic.py",第 1538 行,在nonzero f"{type(self) .name } 的值不明确。" ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

当我简单地输入数字而不是数据框列时,该函数工作正常。当我尝试创建一个新列时,才会出现该错误。我用“|”写了“while”循环 但它没有用。我不知道如何修复它。

阿卡什加格

错误是因为这条线

while abs(xn - xf) > eps:

这种类型的比较最适合单个值。但是在一个数据框中你有多个值,所以这不起作用。在您的情况下,最好的解决方案是使用 df.apply()。这会将 pmv_calculator 函数单独应用于每一行。

df['PMV'] = df.apply( lambda x : pmv_calculator(x['temp'], x['temp'], 0.1, 22, 1.1, 1, 0), axis=1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据现有函数中的一个免费参数创建一个可调用函数,该函数在python中具有许多参数

Python:在数据框中,创建一个新列,并使用从另一列的值中切出的字符串

Python:使用 numpy 在数据帧中使用带有时间差的 Pandas 聚合创建一个新列

是否有一个 python 函数可以为带有列表的 Pandas 数据框列获取 `value_counts()`?

Python中是否有一个函数来计算从“ for”循环中创建的带有中断的输出数量?

尝试实现一个函数,该函数从python的链表中删除所有出现的值

根据数据框列的上一个和下一个元素创建python函数

在python中创建一个函数

使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表

使用for循环在Python中创建一个新的DataFrame?

在 python 中创建一个函数,它将在 Pandas 数据框中估算均值或中值

根据数据框中的2列提取信息并创建一个新列-Python

从另一个函数中调用python中的函数(为该函数的变量创建一个数组)

创建一个函数,该函数从文本文件中读取所有代码行,并将每一行放入元组中。-Python 3

我如何使用等效于 excel averageifs 在 python 数据框中创建一个新列

尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

如何编写一个函数,该函数需要一个单词并返回第一个和最后一个字母,中间带有*。[PYTHON]

带有一个条件问题的 Python while 循环

python可以从现有数据框创建一个新的数据框吗?

在Python中,给定一个函数名称,如何获取包含该函数的所有模块?

如何正确设置一个函数,该函数返回python中的年份差异?

从另一个文件调用 Python 函数并使用该函数的 DF

如何使一个函数采用两个不同的值并在Python中生成密钥?

将带有参数的函数传递给Python中的另一个函数?

python是否有一种方法可以将一个论点的默认值设置为该函数中的另一个论点?

python,使用一个循环的幂函数

Python - 如何从数据列表中为每个月创建一个新的数据框

如何创建一个新列,该列给出python数据框中该特定月份的天数?

如何在另一个函数的for循环中使用函数到python中