基于Python中的多个复杂条件进行联接

用户名

我想知道在Python中(在Pandas之内还是之外)是否有一种方法可以像在SQL中基于多个复杂条件在两个表上一样进行等效联接,例如表1中的值比表2中的值少10多个,或仅在满足某些条件的表1中的某个字段上,等等。

这是为了组合一些基本表以实现具有更多字段和信息的联合表。我知道在Pandas中,我们可以在某些列名称上合并两个数据框,但是这种机制似乎过于简单,无法提供所需的结果。

例如,等效的SQL代码可能像这样:

SELECT
a.*,
b.*
FROM Table1 AS a
JOIN Table 2 AS b
ON
a.id = b.id AND
a.sales - b.sales > 10 AND
a.country IN ('US', 'MX', 'GB', 'CA')

我想要一种等效的方法来在两个数据帧上用Python实现相同的联接表。任何人都可以分享见解?

谢谢!

恐惧症

原则上,您的查询可以重写为join和过滤where子句。

SELECT a.*, b.*
FROM Table1 AS a
JOIN Table2 AS b
ON a.id = b.id 
WHERE a.sales - b.sales > 10 AND a.country IN ('US', 'MX', 'GB', 'CA')

假设数据帧巨大并且您不希望有大的中间表,我们可以首先过滤数据帧A。

import pandas as pd

df_a, df_b = pd.Dataframe(...), pd.Dataframe(...)

# since A.country has nothing to do with the join, we can filter it first.
df_a = df_a[df_a["country"].isin(['US', 'MX', 'GB', 'CA'])]

# join 
merged = pd.merge(df_a, df_b, on='id', how='inner')

# filter
merged = merged[merged["sales_x"] - merged["sales_y"] > 10]

脱离主题:根据使用情况,您可能需要使用abs()差异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章