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

两个不同长度的pandas DataFrame如何生成带自定义计算的笛卡尔积新表

问题解法

你需要实现的是两个DataFrame的笛卡尔积运算后自定义列计算,用pandas内置向量化操作即可高效完成,完全不需要嵌套循环。

方案1:Pandas 1.2.0及以上版本(最简洁)

直接用merge的cross连接模式生成笛卡尔积,再做列计算和重命名即可:

# 生成两个表全量配对的笛卡尔积
df3 = df1.merge(df2, how="cross")
# 计算两值求和的新列
df3["sum"] = df3["val1"] + df3["val2"]
# 重命名列、筛选需要的输出字段
df3 = df3.rename(columns={"col1": "colx", "col2": "coly"})[["colx", "coly", "sum"]]

方案2:兼容旧版本Pandas

如果使用的是更早不支持cross连接的版本,可以通过新增临时公共键的方式实现笛卡尔积:

# 给两个表新增相同值的临时关联键
df1["tmp_key"] = 0
df2["tmp_key"] = 0
# 按临时键关联得到笛卡尔积后删除临时键
df3 = df1.merge(df2, on="tmp_key").drop("tmp_key", axis=1)
# 后续计算、重命名逻辑和方案1一致
df3["sum"] = df3["val1"] + df3["val2"]
df3 = df3.rename(columns={"col1": "colx", "col2": "coly"})[["colx", "coly", "sum"]]

原写法的问题说明

你原来的嵌套iterrows+append写法性能非常差:iterrows遍历本身效率极低,且append每次都会生成新的DataFrame对象,数据量稍大就会出现明显卡顿,上面两种向量化方案的性能是循环写法的百倍以上,数据量越大优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:00:02