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

Python中按CUI分组,将MSH对应CODE值填充至新列MSH_ID

问题描述

原始DataFrame如下:

CUI      CODE     SAB TTY STR                                cui_name
C0000772 10028183 MDR LLT Multiple congenital anomalies      Multiple congenital anomalies
C0000772 10002585 MDR LLT Anomalies congenital multiple      Multiple congenital anomalies
C0000772 10002621 MDR LLT Anomaly congenital multiple (NOS)  Multiple congenital anomalies
C0000772 10025533 MDR LLT Malformations multiple             Multiple congenital anomalies
C0000772 10028182 MDR LLT Multiple congenital abnormalities  Multiple congenital anomalies
C0000772 10028182 MDR PT Multiple congenital abnormalities   Multiple congenital anomalies
C0000772 10028185 MDR LLT Multiple congenital malformations  Multiple congenital anomalies
C0000772 D000015 MSH MH "Abnormalities, Multiple"            Multiple congenital anomalies
C0001163 10000521 MDR LLT Acoustic nerve disorder NOS       Vestibulocochlear Nerve Diseases
C0001163 10078794 MDR LLT Auditory nerve disorder           Vestibulocochlear Nerve Diseases
C0001163 10078794 MDR PT Auditory nerve disorder            Vestibulocochlear Nerve Diseases
C0001163 D000160 MSH MH Vestibulocochlear Nerve Diseases    Vestibulocochlear Nerve Diseases

需要新增一列MSH_ID,要求同一CUI的所有行都填充该CUI对应SAB字段为MSH时的CODE值,预期输出如下:

CUI        CODE     SAB TTY STR                 cui_name                      MSH_ID
C0000772  10028183 MDR LLT Multiple congenital anomalies     Multiple congenital anomalies D000015
C0000772  10002585 MDR LLT Anomalies congenital multiple     Multiple congenital anomalies D000015
C0000772  10002621 MDR LLT Anomaly congenital multiple (NOS) Multiple congenital anomalies D000015
C0000772  10025533 MDR LLT Malformations multiple            Multiple congenital anomalies D000015
C0000772  10028182 MDR LLT Multiple congenital abnormalities Multiple congenital anomalies D000015
C0000772  10028182 MDR PT  Multiple congenital abnormalities Multiple congenital anomalies D000015
C0000772  10028185 MDR LLT Multiple congenital malformations Multiple congenital anomalies D000015
C0001163 10000521  MDR LLT Acoustic nerve disorder NOS     Vestibulocochlear Nerve Diseases D000160
C0001163 10078794  MDR LLT Auditory nerve disorder         Vestibulocochlear Nerve Diseases D000160
C0001163 10078794  MDR PT  Auditory nerve disorder         Vestibulocochlear Nerve Diseases D000160

尝试了以下代码,但无法将值填充到同一CUI的其他行:

test['MSH_ID'] = test.loc[test['SAB'] == 'MSH', 'CODE']
解决方案

方法1:使用groupby + transform

按CUI分组后,筛选每组内SAB='MSH'的CODE值,通过transform将唯一值广播到组内所有行(假设每个CUI对应唯一的MSH CODE):

test['MSH_ID'] = test.groupby('CUI')['CODE'].transform(lambda x: x[test.loc[x.index, 'SAB'] == 'MSH'].iloc[0])

方法2:构建映射字典后map

先提取CUI与对应MSH CODE的映射关系,再通过map匹配到每行:

# 创建CUI到MSH CODE的字典
msh_map = test[test['SAB'] == 'MSH'].set_index('CUI')['CODE'].to_dict()
# 映射生成新列
test['MSH_ID'] = test['CUI'].map(msh_map)

方法3:使用merge

将原DataFrame与筛选出的MSH记录按CUI合并,自动填充对应值:

# 提取MSH相关的CUI和CODE,并重命名列
msh_df = test[test['SAB'] == 'MSH'][['CUI', 'CODE']].rename(columns={'CODE': 'MSH_ID'})
# 左连接合并
test = test.merge(msh_df, on='CUI', how='left')

以上三种方法均可实现需求,其中方法2代码简洁且效率较高,适合处理较大数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:50:30