Python 合并多个数据帧-一些具有共享唯一ID,一些具有共享列

Python 合并多个数据帧-一些具有共享唯一ID,一些具有共享列,python,join,pandas,merge,dataframe,Python,Join,Pandas,Merge,Dataframe,好的,熊猫和蟒蛇相对来说比较陌生,所以如果我的问题非常明显,请道歉。浏览了所有关于合并、加入和连接的熊猫文档,通读了Stackoverflow和Scriptscoop上的所有类似问题,并在YouTube上观看了数小时的熊猫教程。但我还没有弄清楚如何做我想做的事情,这在熊猫身上似乎相对容易 基本上,我对每种阳性细菌结果(大肠杆菌、金黄色葡萄球菌等)都有一个数据框架。在数据框中,有一个与患者关联的唯一ID(医嘱),以及结果、日期和病房名称。一名患者可能只对一种细菌呈阳性,也可能对多种细菌呈阳性,因此

好的,熊猫和蟒蛇相对来说比较陌生,所以如果我的问题非常明显,请道歉。浏览了所有关于合并、加入和连接的熊猫文档,通读了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')似乎工作得很好。不知道为什么我会有这么多麻烦。谢谢你的帮助!