如何基于多列抗生素组合条件填充DataFrame的TREATED列
问题:填充DataFrame的TREATED列
我有一个包含6列抗生素使用情况的DataFrame,每列用'Yes'或'No'表示是否使用对应抗生素,原始数据如下:
| AZITH | CLIN | CFTX | METRO | CFTN | DOXY | TREATED |
|---|---|---|---|---|---|---|
| Yes | Yes | No | No | No | No | |
| No | Yes | No | Yes | No | No | |
| Yes | Yes | No | No | No | No | |
| No | No | No | No | No | No | |
| Yes | Yes | Yes | Yes | Yes | Yes | |
| No | Yes | Yes | Yes | No | Yes | |
| No | No | No | No | No | Yes | |
| No | No | No | No | No | No | |
| Yes | Yes | Yes | No | No | No | |
| Yes | No | Yes | Yes | No | No | |
| Yes | No | No | No | Yes | No | |
| No | No | Yes | Yes | No | Yes | |
| No | No | No | No | Yes | Yes | |
| No | No | No | Yes | No | Yes |
需要填充TREATED列,规则如下:
只要满足以下任意一种抗生素组合(对应列值为'Yes'),则填入'Yes',否则填入'No':
- AZITH 和 CLIN 均为'Yes'
- AZITH、CFTX 和 CLIN 均为'Yes'
- AZITH、CFTX 和 METRO 均为'Yes'
- AZITH 和 CFTN 均为'Yes'
- CFTX、DOXY 和 METRO 均为'Yes'
- CFTN 和 DOXY 均为'Yes'
- DOXY 和 METRO 均为'Yes'
注意:即使同时满足多个组合,也只需返回'Yes'。
解决方案
使用Pandas通过布尔值转换和条件判断实现,代码如下:
import pandas as pd # 假设原始数据已加载到DataFrame df中 # 将Yes/No转换为布尔值,简化逻辑运算 bool_df = df.replace({'Yes': True, 'No': False}) # 定义各个判断条件 cond1 = bool_df['AZITH'] & bool_df['CLIN'] cond2 = bool_df['AZITH'] & bool_df['CFTX'] & bool_df['CLIN'] cond3 = bool_df['AZITH'] & bool_df['CFTX'] & bool_df['METRO'] cond4 = bool_df['AZITH'] & bool_df['CFTN'] cond5 = bool_df['CFTX'] & bool_df['DOXY'] & bool_df['METRO'] cond6 = bool_df['CFTN'] & bool_df['DOXY'] cond7 = bool_df['DOXY'] & bool_df['METRO'] # 合并所有条件,满足任意一个则标记为Yes df['TREATED'] = (cond1 | cond2 | cond3 | cond4 | cond5 | cond6 | cond7).replace({True: 'Yes', False: 'No'})
最终输出结果
运行代码后得到的DataFrame如下:
| AZITH | CLIN | CFTX | METRO | CFTN | DOXY | TREATED |
|---|---|---|---|---|---|---|
| Yes | Yes | No | No | No | No | Yes |
| No | Yes | No | Yes | No | No | No |
| Yes | Yes | No | No | No | No | Yes |
| No | No | No | No | No | No | No |
| Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| No | Yes | Yes | Yes | No | Yes | Yes |
| No | No | No | No | No | Yes | No |
| No | No | No | No | No | No | No |
| Yes | Yes | Yes | No | No | No | Yes |
| Yes | No | Yes | Yes | No | No | Yes |
| Yes | No | No | No | Yes | No | Yes |
| No | No | Yes | Yes | No | Yes | Yes |
| No | No | No | No | Yes | Yes | Yes |
| No | No | No | Yes | No | Yes | Yes |
内容的提问来源于stack exchange,提问作者Harlemworld
相关产品推荐
相关产品推荐

