python教程—panda左外连接多个列上的多个数据流-Python实用宝典

python教程—panda左外连接多个列上的多个数据流

我是使用DataFrame的新手,我想知道如何在一系列表的多个列上执行左外连接的SQL等效

我是使用DataFrame的新手,我想知道如何在一系列表的多个列上执行左外连接的SQL等效

例子:

    df1: Year Week Colour Val1 2014 A Red 50 2014 B Red 60 2014 B Black 70 2014 C Red 10 2014 D Green 20 df2: Year Week Colour Val2 2014 A Black 30 2014 B Black 100 2014 C Green 50 2014 C Red 20 2014 D Red 40 df3: Year Week Colour Val3 2013 B Red 60 2013 C Black 80 2013 B Black 10 2013 D Green 20 2013 D Red 50

本质上,我想做这样的SQL代码(注意,df3没有加入年):

    SELECT df1.*, df2.Val2, df3.Val3 FROM df1 LEFT OUTER JOIN df2 ON df1.Year = df2.Year AND df1.Week = df2.Week AND df1.Colour = df2.Colour LEFT OUTER JOIN df3 ON df1.Week = df3.Week AND df1.Colour = df3.Colour

结果应该如下:

    Year Week Colour Val1 Val2 Val3 2014 A Red 50 Null Null 2014 B Red 60 Null 60 2014 B Black 70 100 Null 2014 C Red 10 20 Null 2014 D Green 20 Null Null

我试过使用merge和join,但不知道如何在多个表上以及什么时候涉及多个关节。有人能帮我一下吗?

谢谢

回答

将它们合并成两个步骤,首先是df1和df2,然后将其结果合并为df3。

    In [33]: s1 = pd.merge(df1, df2, how='left', on=['Year', 'Week', 'Colour'])

我从df3下降了一年,因为你不需要它的最后一个加入。

    In [39]: df = pd.merge(s1, df3[['Week', 'Colour', 'Val3']], how='left', on=['Week', 'Colour']) In [40]: df Out[40]: Year Week Colour Val1 Val2 Val3 0 2014 A Red 50 NaN NaN 1 2014 B Red 60 NaN 60 2 2014 B Black 70 100 10 3 2014 C Red 10 20 NaN 4 2014 D Green 20 NaN 20 [5 rows x 6 columns]

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论