将多个不同行的Excel文件合并到pandas的一个Excel文件中

我有4个Excel文件,我必须合并成一个Excel文件。 包含ID,姓名,年龄和性别的人口统计文件。 实验室文件包含ID,缩写testing名称,testingdate和testing值。 包含身份证,姓名缩写,身体状况,开始和停止date的医疗logging。 给药含有ID,姓名,药物名称,剂量,频率,开始和停止date。

有50个病人。 人口档案包含50个病人的全部50行。 其余的文件有50个病人,但在100到400行,因为每个病人有多个实验室testing或多种药物。

当我在大pandas合并时,我有错误的病人重复或分配实体。 我们面临的挑战是如果你的病人有比实验室更多的药物治疗,那么实验室检查应该用空格来替代重复的病人。

这是一个缩短的表示forms:

import pandas as pd lab = pd.read_excel('data/data.xlsx', sheetname='lab') drugs = pd.read_excel('data/data.xlsx', sheetname='drugs') merged_data = pd.merge(drugs, lab, on='ID', how='left') merged_data.to_excel('merged_data.xls') 

你得到这个结果: pandas合并结果

我更喜欢这个结果:首选输出

考虑在groupby() cumcount()上使用cumcount() ,然后joinID字段:

 drugs['GrpCount'] = (drugs.groupby(['ID'])).cumcount() lab['GrpCount'] = (lab.groupby(['ID'])).cumcount() merged_data = pd.merge(drugs, lab, on=['ID', 'GrpCount'], how='left').drop(['GrpCount'], axis=1) # ID Initials_x Drug Name Frequency Route Start Date End Date Initials_y Name Result Date Result # 0 1 AB AMPICLOX NaN Oral 21-Jun-2016 21-Jun-2016 AB Rapid Diagnostic Test 30-May-16 Abnormal # 1 1 AB CIPROFLOXACIN Daily Oral 30-May-2016 03-Jun-2016 AB Microscopy 30-May-16 Normal # 2 1 AB Ibuprofen Tablet 400 mg Two Times a Day Oral 06-Oct-2016 10-Oct-2016 NaN NaN NaN NaN # 3 1 AB COARTEM NaN Oral 17-Jun-2016 17-Jun-2016 NaN NaN NaN NaN # 4 1 AB INJECTABLE ARTESUNATE 12 Hourly Intravenous 01-Jun-2016 02-Jun-2016 NaN NaN NaN NaN # 5 1 AB COTRIMOXAZOLE Daily Oral 30-May-2016 12-Jun-2016 NaN NaN NaN NaN # 6 1 AB METRONIDAZOLE Two Times a Day Oral 30-May-2016 03-Jun-2016 NaN NaN NaN NaN # 7 2 SS GENTAMICIN Daily Intravenous 04-Jun-2016 04-Jun-2016 SS Microscopy 6-Jun-16 Abnormal # 8 2 SS METRONIDAZOLE 8 Hourly Intravenous 04-Jun-2016 06-Jun-2016 SS Complete Blood Count 6-Oct-16 Recorded # 9 2 SS Oral Rehydration Salts Powder PRN Oral 06-Jun-2016 06-Jun-2016 NaN NaN NaN NaN # 10 2 SS ZINC 8 Hourly Oral 06-Jun-2016 06-Jun-2016 NaN NaN NaN NaN