首页 > 解决方案 > Pandas 合并/连接 - 复杂的连接/合并

问题描述

我正在学习合并加入熊猫的两个功能。
我有很多 SQL 经验,所以我试图了解 Pandas 中类似的事情是如何完成的。
所以......好吧,我正在观看关于熊猫合并/加入的讲座,但它在我心中提出的问题比它回答的问题要多。我有两个主要问题。

  1. pandas 中的 merge 和 join 有何不同,甚至它们的文档看起来也很相似?不知道为什么熊猫需要两者。似乎即使这个页面也没有回答这个问题。

https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html

  1. 我可以加入(如 SQL 加入)但基于
    两列之间的不等式或更复杂的逻辑条件,例如

     select * from 
     t1 join t2 on t1.a < t2.b+1 and upper(t1.s1) > upper(t2.s2)
    
     select * from 
     t1 join t2 on t1.a < t2.b+1 or upper(t1.s1) > upper(t2.s2 || t2.s3)  
    
     select * from 
     t1 join t2 on t1.a < t2.b+10 or len(t1.s1) > coalesce(t2.c, 5)
    
     select * from 
     t1 join t2 on ( t1.a * t1.a < t2.b + 10 ) or ( upper(t1.s1) > REGEXP_REPLACE(t2.s2,'(.*) (.*)','\2, \1') ) 
    

我们如何将这三个 SQL 查询转换为例如 pandas 的连接/合并?

注 1: a,b,c 是一些数字列,而 s1,s2,s3 是字符串列

我使用的 SQL 风格特别是 Postgres,但我的问题是通用的。
第 4 个示例中的正则表达式替换了名字和姓氏(如果我们假设 t2.s2 中有一个全名,例如“John Smith”)。||是此 SQL 方言中的字符串连接。


与使用合并/连接的 SQL wrt 相比,我只是想了解我在 pandas 中的限制(如果有的话) 。

注2:我意识到我可以预先按摩我的两个数据框(左/右),以便简化上述连接条件。但是说我们不想这样做,无论出于何种原因。那么……是否可以在pandas中表达上述SQL join语义。

标签: pythonpandas

解决方案


推荐阅读