【问题标题】:Python - pandas different size of cartesian product every runPython - 每次运行熊猫不同大小的笛卡尔积
【发布时间】:2019-04-29 07:31:38
【问题描述】:

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

(如你所见,差别还是蛮大的)

这对我来说听起来很奇怪。有人知道吗?

【问题讨论】:

  • 请分享您的 2 个数据框,以便我们重现您的代码
  • 其中一个真的很大。你确定要吗?
  • @CmpScienceLearner 不是完整的数据框。先用 5 行 df_genes 和 3 行 df_citations 自己尝试一下。如果您的代码给出了相同类型的意外输出,那么像这样分享这几行尝试回答的人可以重现您的问题并找到解决方案。

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


【解决方案1】:

不要使用 .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])

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2014-04-08
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2020-02-03
    • 2019-04-20
    • 2020-07-05
    • 2012-02-24
    相关资源
    最近更新 更多