【问题标题】:Joining two dataframe and keep all column in pandas加入两个数据框并将所有列保留在熊猫中
【发布时间】:2019-02-22 02:31:14
【问题描述】:

我正在尝试使用 pandas 在 python 中执行类似联接的 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 

我想加入这 2 个基于 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 上的名称字段未显示在输出中。有什么办法可以实现吗?

【问题讨论】:

  • df2.merge(df1, left_on='main_id', right_on='id') 的输出是什么,我认为它应该可以工作
  • 我真傻,我忘了将结果保存到变量中。它工作正常

标签: python pandas dataframe


【解决方案1】:

您可以使用 pandas 函数concat。

沿特定轴连接 pandas 对象,并沿其他轴使用可选的设置逻辑。

有一些方法可以使用它,首先使用问题中提出的方式:

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

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

如果您更喜欢忽略缺失值的行,您可以使用:

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

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

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

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

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

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

【讨论】:

  • 谢谢,我的代码确实有效,但您的解决方案也有效,而且它填补了缺失的值!
猜你喜欢
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2017-08-13
  • 2021-05-15
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多