我在python中有两个数据框,我想对它们做笛卡尔积。 为此,我使用了以下相同的键盘命令进行合并:
print("dna", df_genes.size)
print("names",df_citations.size)
df_genes['key'] = 0
df_citations['key'] = 0
df = pd.merge(df_genes, df_citations, on='key').drop('key', axis = 1)
print("df before",df.size)
但是,每次运行时,我得到的笛卡尔积的大小都是不同的-从来不是前两个数据帧的乘积。 例如,在上一次运行中,我得到了:
('dna', 7437309)
('names', 165)
('df before', 490862394)
(如您所见,差异很大)
这对我来说听起来很奇怪。有人有线索吗?
答案 0 :(得分:2)
不要使用.size,它显示的是行数乘以列。要检查您的笛卡尔乘积是否有效,您希望当df1有5行而df2有3行时,笛卡尔积将有15行。您可以通过将.size替换为.shape或.shape [0]
来进行检查在您的情况下:
print("dna", df_genes.shape[0])
print("names", df_citations.shape[0])
df_genes['key'] = 0
df_citations['key'] = 0
df = pd.merge(df_genes, df_citations, on='key').drop('key', axis = 1)
print("df before", df.shape[0])