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

如何不通过求和聚合行?实现患者问题DataFrame的宽表转换

解决方法:无需循环,用Pandas快速转换数据格式

嘿,你这个需求其实用Pandas的内置函数就能轻松实现,完全不用写复杂的循环或者手动聚合!下面给你两种简单高效的方法:

方法1:使用pivot_table(直观易懂)

pivot_table是Pandas里专门用来重塑数据的工具,刚好匹配你的需求:把每个患者的病症转成列,并用0/1标记是否存在。

import pandas as pd

# 先构造你的示例数据(实际使用时替换成你的DataFrame即可)
df = pd.DataFrame({
    'PAT_MRN_ID': [9641956, 9641956, 8227510, 8165474, 7860000],
    'Problem': ['Headache', 'Stomach_ache', 'Headache', 'Chicken_pox', 'Stomach_ache']
})

# 用pivot_table转换格式
result_df = df.pivot_table(
    index='PAT_MRN_ID',  # 行:患者ID
    columns='Problem',   # 列:病症
    aggfunc=lambda x: 1, # 只要存在该病症就标记为1
    fill_value=0         # 不存在的病症填0
).reset_index()

# 去掉列名的层级标签,让格式更干净
result_df.columns.name = None

运行后得到的result_df就是你想要的格式啦!

方法2:使用get_dummies + groupby(更简洁)

如果你喜欢更简洁的写法,可以用get_dummies生成哑变量,再按患者ID分组求和:

import pandas as pd

# 同样先构造示例数据
df = pd.DataFrame({
    'PAT_MRN_ID': [9641956, 9641956, 8227510, 8165474, 7860000],
    'Problem': ['Headache', 'Stomach_ache', 'Headache', 'Chicken_pox', 'Stomach_ache']
})

# 生成病症的哑变量列
problem_dummies = pd.get_dummies(df['Problem'])

# 合并患者ID和哑变量列,再按ID分组求和(同一个患者的病症会累加为1,无则为0)
result_df = pd.concat([df['PAT_MRN_ID'], problem_dummies], axis=1)\
              .groupby('PAT_MRN_ID').sum()\
              .reset_index()

这两种方法都避免了手动循环,而且处理大数据量时效率比循环高得多,完全满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:23:46