连接两个数据框,并将所有列保留在熊猫中

时间:2019-02-22 02:31:14

标签: python pandas dataframe

我正在尝试使用pandas在python中执行类似join的sql语句。

我有这两个数据框

df1:

id  name
7   MPS
10  MCM
11  MIB
12  NEW-MCM-DEV
15  SAMS
16  NEW-MCM-VIT

df2:

main_id numberOfNodes tier_id   tier_name               
7       2             29        MPS-Online           
7       0             247       Offline-b24-settle  
7       0             246       Offline-bank-data-feed  
7       1             256       Offline-Citynet-Recon   
7       1             433       WAS 
10      8             26        APP 
10      2             296       BATCH   
10      2             358       BBO 

我想基于id(df1)和main_id(df2)加入这两个数据框。

我想要的输出是

main_id numberOfNodes tier_id   tier_name               name
7       2             29        MPS-Online              MPS
7       0             247       Offline-b24-settle      MPS
7       0             246       Offline-bank-data-feed  MPS 
7       1             256       Offline-Citynet-Recon   MPS
7       1             433       WAS                     MPS
10      8             26        APP                     MCM
10      2             296       BATCH                   MCM
10      2             358       BBO                     MCM

我尝试使用

df2.merge(df1, left_on='main_id', right_on='id')

并尝试使用

df2.join(df1, on=['main_id'], how='outer')

但没有任何作用,因为df1上的名称字段未显示在输出中。我有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用熊猫函数concat

  

沿着特定的轴连接熊猫对象,并沿其他轴连接可选的设置逻辑。

有一些使用方式,首先按照问题的方式使用:

pd.concat([df1, df4], axis=1, sort=False)

在这种情况下,熊猫将使用NaN填充缺失值。示例:

enter image description here

如果您希望忽略具有缺失值的行,则可以使用:

pd.concat([df1, df4], axis=1, join='inner')

在这种情况下,数据框之间的联接将作为SQL上的内部联接。示例:

enter image description here

如果您想保留一些数据框结构,只是用新列完成该结构,则可以使用:

pd.concat([df1, df4], axis=1, join_axes=[df1.index])

在这种情况下,结果数据帧将具有df1的相同行,但具有df4的一些额外的列。示例:

enter image description here

可以在this link上找到更多信息。