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

如何将DataFrame中多列合并症值转换为以合并症为列名的二进制哑变量列

实现方案

方案1:宽转长后聚合(更灵活,推荐)

核心逻辑是先把多列合并症转为同一列的多行数据,再做独热编码后按主键聚合,适合需要过滤无效合并症取值的场景:

import pandas as pd

# 匹配所有COMORBID开头的合并症列
comorbid_cols = [col for col in df.columns if col.startswith('COMORBID')]

# 宽表转长表,丢弃空值行
melted_df = df.melt(
    id_vars='INC_KEY', 
    value_vars=comorbid_cols, 
    value_name='comorbid'
).dropna(subset=['comorbid'])

# 可选:过滤不需要的合并症取值,比如示例中的Other
# melted_df = melted_df[melted_df['comorbid'] != 'Other']

# 生成独热编码后按INC_KEY分组求和,出现过的合并症取值为1
comorbid_dummies = pd.get_dummies(melted_df['comorbid'])
result = comorbid_dummies.groupby(melted_df['INC_KEY']).sum().reset_index()

# 关联原表所有INC_KEY,补全无任何合并症的行,空值填0
result = df[['INC_KEY']].merge(result, on='INC_KEY', how='left').fillna(0).astype(int)

# 可选:合并症列名统一转大写,匹配示例输出格式
result.columns = [col.upper() if col != 'INC_KEY' else col for col in result.columns]

方案2:直接合并get_dummies结果(代码更简洁)

基于你原本的pd.get_dummies思路,后续按合并症名称合并多列即可:

import pandas as pd

comorbid_cols = [col for col in df.columns if col.startswith('COMORBID')]

# 生成独热编码时去掉前缀,直接用合并症名称作为列名
dummies = pd.get_dummies(df[comorbid_cols], prefix='', prefix_sep='')

# 按列名分组求和,把同一合并症在不同COMORBID列的结果合并
dummies = dummies.groupby(dummies.columns, axis=1).sum()

# 可选:删除不需要的合并症列,比如Other
# dummies = dummies.drop('OTHER', axis=1, errors='ignore')

# 拼接主键列得到最终结果
result = pd.concat([df['INC_KEY'], dummies], axis=1)

# 可选:列名转大写
result.columns = [col.upper() if col != 'INC_KEY' else col for col in result.columns]

两种方案最终输出的结果都符合要求的格式,性能上对于常规医疗数据量都没有问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:36:03