【问题标题】:Converting an SQL Query to Pandas将 SQL 查询转换为 Pandas
【发布时间】:2022-01-19 12:08:35
【问题描述】:

我有以下 SQL 左连接查询要转换为 Pandas 连接。

select df1.pc, df1.si, df1.cat,
        df2.cid As mid, df2.sd as md, df2.cid As bi, df2.sd as bd, sum(df1.sal) as Sal
        from df1
        left join df3
        on df1.cat = df3.cd 
        left join df2
        on df2.chd = df3.mid
        and df1.id = df2.id 
        left join df3
        on df1.cat = df3.cd 
        left join df2
        on df2.chd = df3.bid
        and df1.id = df2.id 
            group by df1.pc, df1.si, df1.cat, df2.cid, df2.sd, df2.cid, df2.sd ;

我在 pandas 中尝试了以下代码

final = pd.merge(
        pd.merge(
        pd.merge(df1, df3,how='left', left_on=['cat'], right_on=['cid']),
                    df2,how='left', left_on=['chd','id'], right_on=['mid','id']),
                        df3,how='left', left_on=['cat'], right_on=['cid']),
                            df2,how='left', left_on=['cid','id'], right_on=['bid','id'])

但有些地方我弄错了。这是等效的吗?或任何建议 请建议...在这里击中

【问题讨论】:

    标签: python sql pandas


    【解决方案1】:

    在pandas中使用merge时,如果没有事先指定同名列的后缀,会在左边加_x,右边加_y。

    import pandas as pd
    
    dict = {'Name':['Martha', 'Tim', 'Rob', 'Georgia'],
            'Maths':[87, 91, 97, 95],
            'Science':[83, 99, 84, 76]
           }
      
    df1 = pd.DataFrame(dict)
    df2 = pd.DataFrame(dict)
    df3 = pd.DataFrame(dict)
    
    df1.merge(df2,how = 'left',left_on=['Maths'], right_on=['Science']).merge(df3,how = 'left',left_on=['Maths_x','Name_x'], right_on=['Science','Name'])
    

    我看到后 2 次合并与前 2 次合并。这对我来说似乎是重复的。

    结果截图1

    【讨论】:

    • 感谢您的回复。能够按照您建议的方式合并 dfs。
    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2021-04-11
    • 2015-10-28
    • 1970-01-01
    • 2014-08-14
    • 2015-10-10
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多