Python 合并多个数据帧-一些具有共享唯一ID,一些具有共享列
好的,熊猫和蟒蛇相对来说比较陌生,所以如果我的问题非常明显,请道歉。浏览了所有关于合并、加入和连接的熊猫文档,通读了Stackoverflow和Scriptscoop上的所有类似问题,并在YouTube上观看了数小时的熊猫教程。但我还没有弄清楚如何做我想做的事情,这在熊猫身上似乎相对容易 基本上,我对每种阳性细菌结果(大肠杆菌、金黄色葡萄球菌等)都有一个数据框架。在数据框中,有一个与患者关联的唯一ID(医嘱),以及结果、日期和病房名称。一名患者可能只对一种细菌呈阳性,也可能对多种细菌呈阳性,因此数据帧之间的一些订单号重叠,有些订单号只显示一次 例如:Python 合并多个数据帧-一些具有共享唯一ID,一些具有共享列,python,join,pandas,merge,dataframe,Python,Join,Pandas,Merge,Dataframe,好的,熊猫和蟒蛇相对来说比较陌生,所以如果我的问题非常明显,请道歉。浏览了所有关于合并、加入和连接的熊猫文档,通读了Stackoverflow和Scriptscoop上的所有类似问题,并在YouTube上观看了数小时的熊猫教程。但我还没有弄清楚如何做我想做的事情,这在熊猫身上似乎相对容易 基本上,我对每种阳性细菌结果(大肠杆菌、金黄色葡萄球菌等)都有一个数据框架。在数据框中,有一个与患者关联的唯一ID(医嘱),以及结果、日期和病房名称。一名患者可能只对一种细菌呈阳性,也可能对多种细菌呈阳性,因此
Order Test_EC Results_EC Date Ward Name
0 K70201 E. coli MODERATE 2014-01-02 North
1 K70277 E. coli MODERATE 2014-01-02 North
2 K70205 E. coli FEW 2014-01-02 West
3 K70818 E. coli MODERATE 2014-01-03 South
4 K70202 E. coli FEW 2014-01-03 West
5 K80070 E. coli RARE 2014-01-03 North
6 K80666 E. coli FEW 2014-01-03 East
Order Test_SA Results_SA Date Ward Name
0 K80766 S.aureus MANY 2014-01-01 West
1 K70201 S.aureus MANY 2014-01-02 North
2 K70277 S.aureus MANY 2014-01-02 North
3 K70205 S.aureus FEW 2014-01-02 West
4 K90107 S.aureus FEW 2014-01-06 North
我想根据患者的医嘱号创建一个主数据库,为每个阳性检测和结果以及日期和病房名称创建一个相关列。如果患者一项检查呈阳性,另一项检查呈阴性,则可以进行NaN填充。如果来自不同数据帧的两个订单号匹配,那么根据定义,它们将具有相同的日期和病房名称,因此基本上测试和结果列将是唯一的新信息
简而言之,我希望维护每个表中包含的所有信息,同时将每个订单号的所有关联数据显示在一行中。
我希望得到这样的东西:
Order Test_EC Results_EC Test_SA Results_SA Date Ward Name
0 K70201 E. coli MODERATE S.aureus MANY 2014-01-02 North
1 K70277 E. coli MODERATE S.aureus MANY 2014-01-02 North
2 K70205 E. coli FEW S.aureus FEW 2014-01-02 West
3 K70818 E. coli MODERATE NaN NaN 2014-01-03 South
4 K70202 E. coli FEW NaN NaN 2014-01-03 West
5 K80070 E. coli RARE NaN NaN 2014-01-03 North
6 K80666 E. coli FEW NaN NaN 2014-01-03 East
7 K80766 NaN NaN S.aureus MANY 2014-01-01 West
8 K90107 NaN NaN S.aureus FEW 2014-01-06 North
如您所见,结果数据框缩短了三行,因为有三名患者同时感染了大肠杆菌和金黄色葡萄球菌。order列中没有重复的值,但所有信息都已保存
我还想继续建立这样一个数据库,用不同的细菌做同样的事情20多次。实际数据集约为100000个唯一订单号
如果我浏览了我尝试过的各种连接、合并和concat函数的组合,以及它们不起作用的原因,那么这篇文章就太长了。我知道我错过了一些明显的东西。任何想法都将不胜感激 看起来您想要“外部”合并
In [154]: df1
Out[154]:
Order Test_EC Results_EC Date Ward Name
0 K70201 E. coli MODERATE 2014-01-02 North
1 K70277 E. coli MODERATE 2014-01-02 North
2 K70205 E. coli FEW 2014-01-02 West
3 K70818 E. coli MODERATE 2014-01-03 South
4 K70202 E. coli FEW 2014-01-03 West
5 K80070 E. coli RARE 2014-01-03 North
6 K80666 E. coli FEW 2014-01-03 East
In [155]: df2
Out[155]:
Order Test_SA Results_SA Date Ward Name
0 K80766 S.aureus MANY 2014-01-01 West
1 K70201 S.aureus MANY 2014-01-02 North
2 K70277 S.aureus MANY 2014-01-02 North
3 K70205 S.aureus FEW 2014-01-02 West
4 K90107 S.aureus FEW 2014-01-06 North
In [156]: df1.merge(df2, how='outer')
Out[156]:
Order Test_EC Results_EC Date Ward Name Test_SA Results_SA
0 K70201 E. coli MODERATE 2014-01-02 North S.aureus MANY
1 K70277 E. coli MODERATE 2014-01-02 North S.aureus MANY
2 K70205 E. coli FEW 2014-01-02 West S.aureus FEW
3 K70818 E. coli MODERATE 2014-01-03 South NaN NaN
4 K70202 E. coli FEW 2014-01-03 West NaN NaN
5 K80070 E. coli RARE 2014-01-03 North NaN NaN
6 K80666 E. coli FEW 2014-01-03 East NaN NaN
7 K80766 NaN NaN 2014-01-01 West S.aureus MANY
8 K90107 NaN NaN 2014-01-06 North S.aureus FEW
嗯,是的!merge(df2,on=['Order'、'Date'、'wardname'],how='outer')似乎工作得很好。不知道为什么我会有这么多麻烦。谢谢你的帮助!