You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DataFrame每个值生成重复项,完成两个无共同列DataFrame的全量匹配

两个无共同列DataFrame的全匹配(笛卡尔积)实现方案

你需要实现的是两个DataFrame的笛卡尔积,即第一个表的每一行与第二个表的每一行两两组合,无需使用for循环实现,pandas有更高效的内置方案:

方法1:cross merge(pandas ≥ 1.2.0 版本推荐)

这是官方提供的最简单写法,直接指定合并方式为cross即可:

import pandas as pd

# 原始示例数据
df_this = pd.DataFrame({'scu_key': [4, 8, 10, 12]})
df_that = pd.DataFrame({'dates': ['02-2018', '03-2018', '04-2018', '05-2018']})

# 生成笛卡尔积
df_all_that = df_this.merge(df_that, how='cross')

运行后得到的结果和你给出的预期输出完全一致。

方法2:临时辅助列merge(兼容所有pandas版本)

如果你的pandas版本低于1.2.0不支持cross merge,可以给两个表新增一个值相同的临时辅助列,按辅助列合并后删除即可:

# 新增临时共同列
df_this['tmp'] = 1
df_that['tmp'] = 1

# 合并后删除临时列
df_all_that = df_this.merge(df_that, on='tmp').drop('tmp', axis=1)

方法3:itertools.product实现(仅适合极小数据集)

数据量非常小的场景下,也可以用迭代器生成组合后转DataFrame:

from itertools import product

df_all_that = pd.DataFrame(product(df_this['scu_key'], df_that['dates']), columns=['scu_key', 'dates'])

以上三种方案均为向量化实现,性能远高于手动for循环遍历拼接,适合各类数据量的场景。

内容的提问来源于stack exchange,提问作者Deke Marquardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:06:07