python - python使用多个条件创建一个新列
问题描述
我刚从 Python 开始,我有一个很大的主题列表及其(BMI)体重指数(以及更多数据)。我需要创建一个新列(称为 OMS),我可以在其中说明它们是否“正常”、“超重”、“肥胖”等。
但我只是找不到正确的方法。我试过 np.when 但这仅适用于 2 个条件。
我尝试了 if、elif、else 没有成功,还有:
df['oms'] = np.nan
df['oms'].loc[(df['IMC'] <=18.5 )] = "slim"
df['oms'].loc[(df['IMC'] >= 18.5) & (df['IMC'] <25 )] = "normal"
df['oms'].loc[(df['IMC'] >= 25) & (df['IMC'] <=30 )] = "overweight"
df['oms'].loc[(df['IMC'] > 30)] = "obese"
有任何想法吗?我被困住了。
解决方案
df.loc[df['IMC'].lt(18.5), 'oms'] = "slim"
df.loc[df['IMC'].ge(18.5) & df['IMC'].lt(25), 'oms'] = "normal"
df.loc[df['IMC'].ge(25) & df['IMC'].lt(30), 'oms'] = "overweight"
df.loc[df['IMC'].ge(30), 'oms'] = "obese"
您也可以使用pd.cut
.
bins = [0, 18.5, 25, 30, 9999]
labels = ['slim', 'normal', 'overweight', 'obese']
df = pd.DataFrame({'IMC': [15, 20, 27, 40]})
df['oms'] = pd.cut(df['IMC'], bins, labels=labels)
>>> df
IMC oms
0 15 slim
1 20 normal
2 27 overweight
3 40 obese
推荐阅读
- embedded-linux - 逐步介绍如何在 Raspberry Pi 或任何嵌入式板上使用 swupdate 进行系统更新
- sql - 如何在日志文件中查看触发函数
- python - 如何在 Paho-MQTT python 中并行订阅和发布?
- javascript - 弹出窗口 - 一个接一个
- python - 读取、操作和保存文本文件
- css - 在列表中居中弹性项目
- scala - Apache Spark将多行连接成一行中的列表
- php - 如何使用唯一键递归合并数组?
- angular - Angular PWA - 在用户更新应用程序之前,新路线不起作用
- c# - 有没有办法通过 appsettings.json 设置 Serilog 格式化程序变量?