Python-每次运行时熊猫的笛卡尔积大小不同

时间:2018-11-27 14:17:05

标签: python python-3.x pandas dataframe cartesian-product

我在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)

(如您所见,差异很大)

这对我来说听起来很奇怪。有人有线索吗?

1 个答案:

答案 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])