Pandas 等效于 SQL CROSS JOIN(笛卡尔积)[重复]

Posted

技术标签:

【中文标题】Pandas 等效于 SQL CROSS JOIN(笛卡尔积)[重复]【英文标题】:Pandas Equivalent of SQL CROSS JOIN (Cartesian Product) [duplicate] 【发布时间】:2018-06-23 14:48:31 【问题描述】:

假设我有两张桌子:

表1:

   col1  col2
      0     1
      2     3

表2:

   col3  col4
      5     6
      7     8

在 SQL 中,如果我做了以下语句:

Select *
From Table1, Table2;

我希望得到一张包含两个表中所有组合的表:

col1 col2 col3 col4
   0    1    5    6
   0    1    7    8
   2    3    5    6
   2    3    7    8

有没有办法对 pandas 中的两个数据框做同样的事情?

【问题讨论】:

我实际上更喜欢这里接受的解决方案而不是上面链接的解决方案(因为它假设“你有一个在两个数据框中重复的每一行的键”)。 【参考方案1】:

一个标准的习惯用法是在一个虚拟列上使用merge

df1.assign(foo=1).merge(df2.assign(foo=1)).drop('foo', 1)

   col1  col2  col3  col4
0     0     1     5     6
1     0     1     7     8
2     2     3     5     6
3     2     3     7     8

【讨论】:

在熊猫版本 0.23.4 中,还必须提供 on='foo' 参数才能合并。喜欢df1.assign(foo=1).merge(df2.assign(foo=1), on='foo').drop('foo', 1) @samutamm 仅当跨 DataFrame 的非键列共享相同名称时才需要。 好的,谢谢@cs95

以上是关于Pandas 等效于 SQL CROSS JOIN(笛卡尔积)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sql JOINs - JOIN,INNER JOIN,LEFT JOIN,RIGHT JOIN,CROSS JOIN

SQL中的CROSS JOIN与INNER JOIN

大数据之Hive:hive中的cross join函数

SQL中join和cross join的区别

SQL中inner joinouter join和cross join的区别

SQL中inner joinouter join和cross join的区别