如何基于hosp(医院ID)与zip(邮编)数据构建患者计数矩阵?
嘿,我来帮你搞定这个患者数量矩阵的问题!根据你的需求,我整理了几种常用工具的实现方法,你可以根据自己的熟悉程度选择:
方法1:用Excel实现(适合非编程用户)
这是最上手的方式,不用写代码就能搞定:
- 第一步:先把你的数据整理成规范的两列格式——一列是
hosp(医院ID),一列是zip(邮编),每一行对应一个患者的就诊记录(同一个患者对应医院和邮编就占一行) - 第二步:选中整个数据区域,点击「插入」选项卡中的「数据透视表」,按提示完成基础设置后,在右侧字段面板里:
- 把
hosp拖到「行」区域 - 把
zip拖到「列」区域 - 把
zip拖到「值」区域,然后右键值区域的单元格,选择「值字段设置」,把汇总方式改成「计数」(默认可能是求和,要切换过来)
- 把
- 第三步:最后可以把矩阵里的空值批量替换成0,这样看起来更直观,行是医院、列是邮编、单元格就是对应患者数量的矩阵就完成啦!
方法2:用Python Pandas实现(适合编程用户)
用Pandas的交叉表函数可以快速生成目标矩阵,代码示例如下:
import pandas as pd # 先模拟你的数据结构(实际使用时可以用pd.read_csv读取本地数据) data = { 'hosp': ['H001', 'H001', 'H002', 'H001', 'H002', 'H002'], 'zip': ['10001', '10002', '10001', '10001', '10003', '10001'] } df = pd.DataFrame(data) # 生成医院-邮编的患者计数矩阵 patient_matrix = pd.crosstab(df['hosp'], df['zip']) # 把空值填充为0,转成整数格式更贴合需求 patient_matrix = patient_matrix.fillna(0).astype(int) # 打印查看结果 print(patient_matrix)
运行后会直接输出行是医院ID、列是邮编、单元格为对应患者数量的矩阵,完全符合你的需求。
方法3:用SQL实现(如果数据存储在数据库中)
如果你的数据在数据库里,可以用条件聚合来生成矩阵,以MySQL为例:
SELECT hosp, COUNT(CASE WHEN zip = '10001' THEN 1 END) AS `10001`, COUNT(CASE WHEN zip = '10002' THEN 1 END) AS `10002`, COUNT(CASE WHEN zip = '10003' THEN 1 END) AS `10003` -- 这里可以继续添加你数据中存在的所有邮编 FROM patient_records GROUP BY hosp;
如果是PostgreSQL等数据库,还可以用专门的crosstab函数来实现动态透视,不过条件聚合的方式兼容性更强。
内容的提问来源于stack exchange,提问作者mandy
相关产品推荐
相关产品推荐

