无需使用merge,如何根据字典条件为pandas DataFrame新增Status列
实现方案
无需使用merge功能,通过遍历规则字典逐条件筛选赋值即可完成需求,具体操作如下:
- 第一步:导入依赖库(若已导入可跳过)
import pandas as pd import numpy as np
- 第二步:使用你提供的已定义资源
# 规则匹配字典 dict_map = { "Yes" : {'Sex':'F', 'Pregnant': 'Y'}, "No" : {'Sex':'F', 'Pregnant': 'N'}, "N/A" : {'Sex': 'M'}, } # 原始DataFrame df = pd.DataFrame( { 'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06'], 'Sex': ["F","M","M",np.nan,"F","F"], 'Pregnant': ['Y', 'N',np.nan, 'Y', '', 'N'] } ) cols_of_interest = ["Sex","Pregnant"]
- 第三步:核心匹配逻辑实现
# 初始化Status列,默认填充空值 df['Status'] = np.nan # 遍历规则字典逐条件匹配 for status_val, condition in dict_map.items(): # 构造筛选掩码:同时满足当前规则下所有字段要求 match_mask = pd.Series([True]*df.shape[0], index=df.index) for col, target in condition.items(): match_mask &= (df[col] == target) # 为符合条件的行赋值对应Status df.loc[match_mask, 'Status'] = status_val # 可选:无匹配结果的行填充默认值,例如填充为"Unknown" # df['Status'] = df['Status'].fillna("Unknown")
- 运行后得到的最终df结果如下:
| ID | Sex | Pregnant | Status |
|---|---|---|---|
| AB01 | F | Y | Yes |
| AB02 | M | N | N/A |
| AB03 | M | NaN | N/A |
| AB04 | NaN | Y | NaN |
| AB05 | F | (空) | NaN |
| AB06 | F | N | No |
内容的提问来源于stack exchange,提问作者Fazli
相关产品推荐
相关产品推荐

