熊猫上多列加入多个dataframes
问题描述:
我是新来使用数据框,我想知道如何执行SQL相当于左外上多列连接上的一系列表格熊猫上多列加入多个dataframes
的例子:
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
我已经尝试过使用合并和连接,但无法弄清楚如何在多个表上执行以及何时涉及多个关节。有人可以帮我解决这个问题吗?
感谢
答
合并他们在两个步骤,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]
答
人们也可以做到这一点与@ TomAugspurger的回答,像这样的小型版本:
df = df1.merge(df2, how='left', on=['Year', 'Week', 'Colour']).merge(df3[['Week', 'Colour', 'Val3']], how='left', on=['Week', 'Colour'])
非常感谢您的回答。因为我有很多数据框,所以我一直在寻找一种将表连接在一起的快捷方式 - 类似于使用“连接”,因为您可以一步连接两个以上的表。但是,我不知道如何在多个连接条件下执行此操作。如果没有更快的方法来做这件事,我会坚持你的建议:) – user3311225
熊猫加入是比关系演算更多的关系代数,你需要按顺序指定步骤。 SQL允许您一起指定所有内容,查询引擎将决定产生结果的最佳步骤。 – ChuckCottrill