我对 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']
列)
我在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']
列)