0

我在sql中学习了join方法,我知道inner join意味着只返回我们想要设置的两个不同表的交集。

我认为对于 python,这个概念是一样的。但是我在理解某些代码时遇到了问题。

crsp1=pd.merge(crsp, crsp_maxme, how='inner', on=['jdate','permco','me'])

crsp1=crsp1.drop(['me'], axis=1)

crsp2=pd.merge(crsp1, crsp_summe, how='inner', on=['jdate','permco'])

如果我理解正确,第一行将表 crsp 和 crsp_maxme 与列 'jdate'、'permco'、'me' 上的交集合并。所以表 crsp1 将有 3 列。第二行删除表 crsp1 的“me”列。最后一个留置权会将新调整的表 crsp1 和 crsp_summe 与内部连接合并,在“jdate”和“permco”上具有交集。这使得新合并的表 crsp2 只有 2 列。

但是,第 2 行的代码解释说,第二行和第三行从 crsp1 中删除了“me”列,然后将其替换为 crsp_summe 表中的“me”,我对此理解有问题。

任何人都可以为我澄清这些行吗?

PS:crsp、crsp_summe、crsp_maxme表我觉得不用解释是什么,因为它们都是由inner join函数框定的。所以请原谅缺乏背景信息。

4

1 回答 1

1

merge()functions参数指定要在on哪些列上进行连接。how指定要应用的联接类型(类似于外部、内部、左侧、右侧等的 sql 联接)。

例如:假设有两个表 A 和 B 包含列A['x1','x2','x3']B['x2','y1']因此基于'x1'(因为它是两个表中的公共列)将它们连接起来A_join_B_on_x1['A_B_x1','A_x2','A_x3','B_y1'],并且连接将基于您想要连接的方式。

在您当前的代码中考虑,

A = crsp1
B = crsp_maxme
C = crsp_summe

现在在您的程序中,您的第一行合并您A,B['jdate','permco','me']列并创建一个A_B包含['jdate','permco','me',...'+columns_from_both_tables(A)(B)']内部连接的新数据框(即基于['jdate','permco','me']列的 A、B 中常见的行)

在此处输入图像描述

第二行从数据框中删除'me'A_B。所以它会像 ['jdate','permco',...'+columns_from_both_tables(A)(B)']

在此处输入图像描述

第三行合并您的A_B,Con['jdate','permco']并创建['jdate','permco',...'+columns_from_both_tables(A_B)(C)']为内部连接(即基于列在 A_B、C 中通用的行['jdate','permco','me']

在此处输入图像描述

于 2021-02-02T14:08:02.687 回答