首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在pandas中将具有不同行的多个Excel文件合并为一个Excel文件

在pandas中将具有不同行的多个Excel文件合并为一个Excel文件
EN

Stack Overflow用户
提问于 2017-01-20 17:28:21
回答 1查看 443关注 0票数 0

我有4个Excel文件,必须合并到一个Excel文件中。包含ID、首字母、年龄和性别的人口统计文件。包含ID、首字母测试名称、测试日期和测试值的实验室文件。病历包含ID、姓名首字母、医疗条件、开始日期和结束日期。给药内容包括ID、首字母、药名、剂量、频率、起止日期。

有50个病人。人口统计文件包含50名患者的所有50行。其余的文件有50个患者,但由于每个患者有多个实验室测试或多个药物,所以在100到400行之间。

当我在pandas中合并时,我有重复的实体或将实体分配给错误的患者。挑战是如何做到这一点,当你有一个病人开了比实验室测试更多的药物时,实验室测试应该用空格替换重复的。

这是一个简短的表示:

代码语言:javascript
运行
复制
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 merge result

我更喜欢这个结果:Prefered output

EN

回答 1

Stack Overflow用户

发布于 2017-01-21 13:14:53

考虑在groupby()上使用cumcount(),然后使用ID在这两个字段上连接

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41760133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档