我对 wrds 数据库的 inner join 含义有什么误解?

What did I misunderstand about inner join meaning for wrds database?

我在sql学习了join方法,我知道inner join就是只返回我们要设置的两个不同table的交集。

我认为 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'])

如果我没理解错的话,第一行将 table crsp 和 crsp_maxme 与列 'jdate'、'permco'、'me' 上的交集合并。所以 table crsp1 将有 3 列。 第二行删除 table crsp1 的 'me' 列。 最后一个 lien 将合并新调整的 table crsp1 和 crsp_summe with inner join,并在 'jdate' 和 'permco' 上有交集。这使得新合并的 table crsp2 只有 2 列。

但是,第 2 行的代码解释说,第二行和第三行从 crsp1 中删除 'me' 列,然后将其替换为 crsp_summe table 中的 'me' ,我在理解上有问题。

谁能帮我解释一下这些台词?

PS:我认为没有必要解释什么是table crsp、crsp_summe和crsp_maxme,因为它们都是由内部连接函数构成的.所以请原谅缺乏背景信息。

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

例如: 假设有两个 tables A 和 B 包含 A['x1','x2','x3']B['x2','y1'] 列,因此根据 'x1' 加入它们(因为它是 table 中的公共列) 会产生 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' 列。所以它会像 ['jdate','permco',...'+columns_from_both_tables(A)(B)']

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