You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需使用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结果如下:
IDSexPregnantStatus
AB01FYYes
AB02MNN/A
AB03MNaNN/A
AB04NaNYNaN
AB05F(空)NaN
AB06FNNo

内容的提问来源于stack exchange,提问作者Fazli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:39:01