Python中如何拼接无关联DataFrame获取笛卡尔积结果
Pandas实现两个DataFrame笛卡尔积的方法
完全不需要写for循环,Pandas有现成的方案可以直接实现你的需求:
首先先构造你提到的示例数据:
import pandas as pd # 表1 df1 = pd.DataFrame({'col1': [1, 2]}) # 表2 df2 = pd.DataFrame({'col1': ['A', 'B']})
方法1(推荐,适用于Pandas 1.2.0及以上版本)
直接用merge方法的cross交叉连接模式,一行代码即可生成笛卡尔积:
res = df1.merge(df2, how='cross') # 按你的要求修改第二列列名为col res.columns = ['col1', 'col']
输出结果如下:
col1 col 0 1 A 1 1 B 2 2 A 3 2 B
方法2(兼容所有Pandas版本)
如果你的环境Pandas版本低于1.2.0,可以通过添加临时公共键的方式实现:
# 给两个DataFrame添加相同的临时辅助列 df1['_tmp'] = 1 df2['_tmp'] = 1 # 按临时列合并后删除临时列 res = df1.merge(df2, on='_tmp').drop('_tmp', axis=1) res.columns = ['col1', 'col']
两种实现的性能都远高于自定义for循环,尤其在数据量较大时差距会非常明显。
内容的提问来源于stack exchange,提问作者Juan Sebastian Roa
相关产品推荐
相关产品推荐

