如何在熊猫数据框中执行左外连接?

Posted

技术标签:

【中文标题】如何在熊猫数据框中执行左外连接?【英文标题】:how to perform left outer join in pandas dataframe? 【发布时间】:2017-06-22 09:55:35 【问题描述】:

我有 2 个数据框 a 和 b:

a 有以下列:

t_id
s_id
first_name
last_name
country_name

b 有以下列:

t_id
s_id
first_name
last_name

我必须进行左外连接才能获取 a 中的记录,但我想使用数据帧 b 中的 first_name 和 last_name 而不是数据帧中的 first_name 和 last_name 并将结果存储在最终输出中。我希望列名保持原样。

我使用了以下数据框查询:

请给点建议。

finaloutput = a.merge(right=b[["first_name","last_name"]], on = ["t_id","s_id"], how = "left")

【问题讨论】:

【参考方案1】:

您可以dropa 中的同一列:

finaloutput=a.drop(['first_name','last_name'],axis=1).merge(b,on=["t_id","s_id"],how="left")

另一种解决方案 - 如果 ab 具有相同的连接列,则可以省略参数 on

finaloutput = a[['t_id','s_id','country_name']].merge(b, how = "left")

更动态的解决方案是找到所有列供difference选择:

lcols = a.columns.difference(b.columns).tolist()
joincols = ["t_id","s_id"]
finaloutput = a[lcols + joincols].merge(b, how = "left")

【讨论】:

【参考方案2】:
finaloutput = a[['t_id','s_id','country_name']].merge(b,on=["t_id","s_id"], how = "left")

这个作品

【讨论】:

以上是关于如何在熊猫数据框中执行左外连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linq 中执行左外连接? [复制]

灵巧;如何在多个条件下执行左外连接?

如何使用 linq lambda 扩展方法执行带有 where 子句的左外连接

真正的左外连接

如何按照核心数据模式实现左外连接?

对两个 MySQL 查询执行左外连接?