gpt4 book ai didi

python - 使用条件从 df 创建列表

转载 作者:行者123 更新时间:2023-12-03 20:00:25 26 4
gpt4 key购买 nike

我需要为 df 中的患者创建一个列表,根据他们的 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 的新手。我想我很接近但无法弄清楚为什么我的数据没有被正确返回。
谢谢。

最佳答案

你的代码中有很多东西。仅举几个:

  • 你需要几个括号:df.BMI.any() > 30 | df.BMI.any() < 19.99应该是 (df.BMI.any() > 30) | (df.BMI.any() < 19.99)
  • &不同于 and
  • 循环内的所有内容,例如df.BMI.any()独立于您正在查看的行,即 Name ,所以你会在任何地方得到相同的值。

  • 我想你可以用 np.select :
    np.select([df.BMI.gt(30) | df.BMI.lt(19.99) | df.Smokes.eq('Yes'),
    df.BMI.between(25,29.99)],
    ['High', 'Medium'], 'Low')
    输出:
    array(['Medium', 'Low', 'High', 'High', 'High', 'Low'], dtype='<U6')

    关于python - 使用条件从 df 创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67475623/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com