python - Pandas 合并/连接 - 复杂的连接/合并
问题描述
我正在学习合并和加入熊猫的两个功能。
我有很多 SQL 经验,所以我试图了解 Pandas 中类似的事情是如何完成的。
所以......好吧,我正在观看关于熊猫合并/加入的讲座,但它在我心中提出的问题比它回答的问题要多。我有两个主要问题。
- pandas 中的 merge 和 join 有何不同,甚至它们的文档看起来也很相似?不知道为什么熊猫需要两者。似乎即使这个页面也没有回答这个问题。
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html
我可以加入(如 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语义。
解决方案
推荐阅读
- postgresql - 如何根据 Postgres 中的一个值进行计数?
- laravel - 是否可以通过 Laravel Passport 执行用户身份验证(不是授权)?
- gitlab - Gitlab,如何在不同的机器上配置构建和测试?
- python - 一个数据帧中的一行出现在另一个数据帧中的概率
- javascript - NodeJs 天气应用程序不显示动态数据
- javascript - 将位置从固定更改为相对或相反会导致布局偏移 (CLS)
- c# - 一次增加后台工作人员处理的数量
- python - 有没有一种方法可以在不打开浏览器的情况下自动执行登录操作?
- c# - 以最大并发运行多个操作 - 最后的 2 个任务未执行
- vba - 如果邮件主题由汉字组成,如何获取邮件主题?