用dataframe重写sql查询;如何从选择中混合不同的来源
Posted
技术标签:
【中文标题】用dataframe重写sql查询;如何从选择中混合不同的来源【英文标题】:Rewriting the sql query with dataframe; how to mix different sources from select 【发布时间】:2021-05-13 15:09:20 【问题描述】:我需要使用 pandas 和数据框重写 sql 查询,并通过几个连接到 python。进行联接没有问题,但是当我想引用并非严格来自联接的数据时,它会变得复杂。
要重写的SQL:
SELECT
table1.id,
field1,
field2,
count(DISTINCT x.apple, x.grape) AS fruits,
min(x.time) min_value
FROM table1
JOIN table2 x using(id)
LEFT JOIN table3 using(id)
GROUP BY 1,2,3
我当前的代码:
mydf, df2, df3 = ...
mydf.merge(df2, on=['id'], how='inner')
mydf.merge(df3, on['id'], how='left')
mydf = mydf[['id', 'field1', 'field2']] # problem, missing fruits, min_value and id should be table1.id
mydf.groupby('id', 'field1', 'field2')
我知道如何加入它们,但我不知道如何创建一个数据框,该数据框将包含来自选择的所需元素,例如table1.id
或 min(x.time) min_value
表格
Table1 columns: [id, field1, field2, field1_2, field1_3]
Table2 columns: [id, field1, field2, apple, grape, time, field2_1, field2_2]
Table3 columns: [id, field1, field2, field3_1, field3_2]
编辑:我添加了示例表,更正了代码第 4 行中的错误,并添加了摘要。
【问题讨论】:
您有可以用来测试我们的解决方案的示例数据吗? 在创建数据框时,您需要确保仅选择相关列。这样加入和结果将与预期相同。同样在您的示例中,您还没有在 Python 中完成分组。 如果您想确保可以在这里得到答案,最好提供一些示例数据(例如,合并后数据框的前几行)。 【参考方案1】:试试这个:
mydf = mydf[['id', 'table1', 'table2']]
【讨论】:
对不起,我犯了一个错误,我提供了错误的代码。而不是mydf = mydf[mydf['id', 'field1', 'field2']]
我的意思是mydf = mydf[['id', 'field1', 'field2']]
。我已经纠正了帖子中的错误。以上是关于用dataframe重写sql查询;如何从选择中混合不同的来源的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Snowflake SQL 查询创建 PySpark pandas-on-Spark DataFrame?
如何将 BigQuery SQL 查询结果转换为 Spark DataFrame?