Python实现多行转单行:将多行值合并为单字段列表
合并患者同一就诊日期的多条诊断记录
现有数据集包含患者ID、就诊日期、诊断代码(Dx)及诊断描述(DxDesc),同一患者在同一日期下有多条诊断记录,需按ID和日期合并为单行,将诊断代码和诊断描述分别合并为单个字段的列表形式。
原始数据集代码
import pandas as pd data = {'ID':[1,1,1,2,2,3,4,4,4,5, 1, 1], 'Date':['8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/18/2022', '8/19/2022', '8/19/2022'], 'Dx':['J45.1', 'D64.0', '401.9', 'J45.0', 'J45.1', 'D64.0', '401.9', 'J45.0', 'X94', 'Z17', 'J45.1', 'NX87.0'], 'DxDesc' : ['Asthma', 'Anemia', 'Asthma other', 'Asthma', 'Hypertension', 'Other disease', 'Other disease 2', 'Asthma other', 'Something', 'Something else', 'Asthma', 'Asthma exacerbation'] } df = pd.DataFrame(data)
解决方案代码
通过groupby按ID和日期分组,再用agg将诊断代码和描述合并为指定格式的字符串:
# 分组并合并字段 result_df = df.groupby(['ID', 'Date']).agg( DxCodes=('Dx', lambda x: ", ".join(f"'{item}'" for item in x)), DxDescs=('DxDesc', lambda x: ", ".join(f"'{item}'" for item in x)) ).reset_index() # 查看结果 print(result_df)
输出结果
| ID | Date | DxCodes | DxDescs |
|---|---|---|---|
| 1 | 8/18/2022 | 'J45.1', 'D64.0', '401.9' | 'Asthma', 'Anemia', 'Asthma other' |
| 1 | 8/19/2022 | 'J45.1', 'NX87.0' | 'Asthma', 'Asthma exacerbation' |
| 2 | 8/18/2022 | 'J45.0', 'J45.1' | 'Asthma', 'Hypertension' |
| 3 | 8/18/2022 | 'D64.0' | 'Other disease' |
| 4 | 8/18/2022 | '401.9', 'J45.0', 'X94' | 'Other disease 2', 'Asthma other', 'Something' |
| 5 | 8/18/2022 | 'Z17' | 'Something else' |
内容的提问来源于stack exchange,提问作者Sandra T
相关产品推荐
相关产品推荐

