大 pandas 交叉联接没有共同点 [英] pandas cross join no columns in common

查看:90
本文介绍了大 pandas 交叉联接没有共同点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用熊猫对两个没有共同列的数据框执行完全外部联接 交叉联接?

How would you perform a full outer join a cross join of two dataframes with no columns in common using pandas?

在MySQL中,您可以简单地执行以下操作:

In MySQL, you can simply do:

SELECT *
FROM table_1
[CROSS] JOIN table_2;

但是在大​​熊猫中,可以这样做:

But in pandas, doing:

df_1.merge(df_2, how='outer')

出现错误:

MergeError: No common columns to perform merge on


到目前为止,我最好的解决方案是使用sqlite:


import sqlalchemy as sa
engine = sa.create_engine('sqlite:///tmp.db')
df_1.to_sql('df_1', engine)
df_2.to_sql('df_2', engine)
df = pd.read_sql_query('SELECT * FROM df_1 JOIN df_2', engine)

推荐答案

IIUC,您需要 merge ,其中两个DataFrames的临时列tmp:

IIUC you need merge with temporary columns tmp of both DataFrames:

import pandas as pd

df1 = pd.DataFrame({'fld1': ['x', 'y'],
                'fld2': ['a', 'b1']})


df2 = pd.DataFrame({'fld3': ['y', 'x', 'y'],
                'fld4': ['a', 'b1', 'c2']})

print df1
  fld1 fld2
0    x    a
1    y   b1

print df2
  fld3 fld4
0    y    a
1    x   b1
2    y   c2

df1['tmp'] = 1
df2['tmp'] = 1

df = pd.merge(df1, df2, on=['tmp'])
df = df.drop('tmp', axis=1)
print df
  fld1 fld2 fld3 fld4
0    x    a    y    a
1    x    a    x   b1
2    x    a    y   c2
3    y   b1    y    a
4    y   b1    x   b1
5    y   b1    y   c2

这篇关于大 pandas 交叉联接没有共同点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆