我需要创建一个患者列表,根据他们的BMI和是否吸烟将其分类为“高”,“中”或“低”。但是,当我当前运行代码时,六个条目都会显示“中”(使用了伪名称和数据)。
df = pd.DataFrame({'Name':['Jordan', 'Jess', 'Jake', 'Alice', 'Alan', 'Lauren'],
'Age':[26, 23, 19, 20, 24, 28],
'Sex':['M', 'F' , 'M', 'F', 'M', 'F'],
'BMI':[26, 22, 24, 17, 35, 20],
'Smokes':['No', 'No', 'Yes', 'No', 'Yes', 'No']})
risk_list = []
for i in df.Name:
if df.BMI.any() > 30 | df.BMI.any() < 19.99 | df.Smokes.any() == "Yes":
risk_list.append("High")
elif df.BMI.any() >= 25 & df.BMI.any() <= 29.99:
risk_list.append("Medium")
elif df.BMI.any() < 24.99 & df.BMI.any() > 19.99 and df.Smokes.any() == "No":
risk_list.append("Low")
print(risk_list)
输出:
['Medium', 'Medium', 'Medium', 'Medium', 'Medium', 'Medium']
我刚接触pandas和Python。我认为我很接近解决问题,但是不能弄清楚为什么我的数据没有正确返回。
谢谢。
iterrows
可以作为一种便利的解决方案,但是它存在性能问题。使用.apply
会更好。 - Derek Onp.select
,但由于他对Python和pandas还很陌生,并且对如何访问数据框中的值感到困惑,所以这是一个很好的起点。 - Camilo Martinez M.