【发布时间】:2021-05-31 16:03:37
【问题描述】:
我试图在 Postgres 中做相当于 Pandas 的外部合并,以便外部合并两个表。
表df_1 包含这些数据:
表df_2 包含这些数据:
所以表 df_1 比 df_2 多了一列 (random_id)。此外,df_1 和 df_2 中都存在 job_id 1711418 和 worker_id 45430。
如果我在 Pandas 中使用“外部合并”方法:
df_1.merge(df_2, on=['job_id', 'worker_id'], how='outer'),我会得到如下所示的理想结果:
但是,我找不到与 Pandas 外部合并方法等效的 SQL (postgres)。
我已尝试运行以下查询:
select *
from df_1
full outer join df_2
on df_1.job_id = df_2.job_id
and df_1.worker_id = df_2.worker_id
但是,结果生成了 2 个额外的重复列,称为 job_id_duplicate_column_name_1 和 worker_id_duplicate_column_name_1,我不想要:
谁能帮忙推荐一种查询方法,可以实现与 Pandas 中的外部合并方法相同的功能?
【问题讨论】:
-
样本数据最好显示为formatted text。请参阅here,了解有关如何创建漂亮表格的一些提示。
-
默认 Pandas 合并/连接是“自然”的 SQL 连接。在使用功能之前阅读文档。
-
@philipxy,自然连接在我的情况下不起作用,因为它只连接匹配的记录。在我的用例中,df_1 和 df_2 之间有一些不同的记录,我想在结果中保留所有这些记录。
-
我的意思是自然完全连接。我错过了我发现的问答只针对自然内部与普通内部,而不是针对内部和外部的自然与普通。您的表的特殊情况意味着您可以进行自然的右连接。您还需要将 NULL 映射到 NaN。在特殊情况和 NaN 之间,您可能希望在接受的答案中使用 UNION 等。我专注于自然与朴素;我目前不确定这是否是您真正想要的结果。 PS请use text, not images/links, for text--including tables & ERDs.
标签: sql pandas postgresql merge outer-join