如何在Pandas中将多就诊患者长表转换为单患者单行的宽表格式
患者就诊记录行转列处理方案
将单患者对应多行的就诊数据,转换为单患者一行,各次就诊信息以就诊1_字段名、就诊2_字段名的形式拆分到多列,可通过Python的pandas工具实现,步骤如下:
1. 导入依赖库
import pandas as pd
2. 准备/导入原始数据
这里模拟符合你描述的原始就诊数据(可替换为你实际的数据集导入代码):
data = { '患者ID': ['P001', 'P001', 'P002'], '就诊日期': ['2023-01-05', '2023-03-10', '2023-02-15'], '诊断结果': ['感冒', '支气管炎', '高血压'], '开药名称': ['布洛芬', '头孢', '氨氯地平'] } df = pd.DataFrame(data)
3. 为患者就诊记录添加序号
按患者ID分组,给每组内的就诊记录从1开始编号:
df['就诊序号'] = df.groupby('患者ID').cumcount() + 1
4. 透视转换数据格式
通过透视表将多行数据转为单行,并重命名列名:
# 生成透视表,以患者ID为行,就诊序号为列,聚合其他字段 pivoted_df = df.pivot_table( index='患者ID', columns='就诊序号', values=['就诊日期', '诊断结果', '开药名称'], aggfunc='first' ) # 重命名列,格式为「就诊序号_字段名」 pivoted_df.columns = [f'就诊{col[1]}_{col[0]}' for col in pivoted_df.columns] # 重置索引,让患者ID成为普通列 pivoted_df = pivoted_df.reset_index()
转换后的数据示例
| 患者ID | 就诊1_就诊日期 | 就诊1_诊断结果 | 就诊1_开药名称 | 就诊2_就诊日期 | 就诊2_诊断结果 | 就诊2_开药名称 |
|---|---|---|---|---|---|---|
| P001 | 2023-01-05 | 感冒 | 布洛芬 | 2023-03-10 | 支气管炎 | 头孢 |
| P002 | 2023-02-15 | 高血压 | 氨氯地平 | NaN | NaN | NaN |
说明:若患者有更多次就诊,会自动生成就诊3_xxx等对应列;未发生的就诊字段会填充NaN,可根据需求替换为空白或其他默认值。
内容的提问来源于stack exchange,提问作者haasan foroozand
相关产品推荐
相关产品推荐

