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

Pandas无需循环实现两个DataFrame相乘拼接的高效方案咨询

高效实现方案

完全可以通过Pandas的向量化操作实现,全程不需要写循环,性能远高于遍历实现:

核心思路

  • 先对两个DataFrame做笛卡尔积关联,实现第一个DF每一行与第二个DF所有行的自动配对,最终行数天然满足len(df1)*len(df2)的要求
  • 利用numpy广播机制直接批量计算四组arm字段的乘积,全程底层C实现,效率极高

实现代码

import pandas as pd

# 假设第一个DataFrame为df1,第二个为df2
# 1. 笛卡尔积关联
df_cross = df1.merge(df2, how='cross')

# 2. 定义字段映射
arm_cols = ['arm1', 'arm2', 'arm3', 'arm4']
angle_cols = [f'{col}_angle' for col in arm_cols]

# 3. 批量计算对应arm的乘积,结果存为新列
df_cross[[f'{col}_res' for col in arm_cols]] = df_cross[angle_cols].values * df_cross[arm_cols].values

# 如果需要保留原始字段直接使用df_cross即可,也可以按需筛选保留列

低版本Pandas兼容方案

如果你使用的Pandas版本低于1.2.0(不支持how='cross'参数),可以用临时关联键实现笛卡尔积:

df1['tmp_key'] = 0
df2['tmp_key'] = 0
df_cross = df1.merge(df2, on='tmp_key').drop('tmp_key', axis=1)

性能对比

以你提到的10000行df1+27行df2的场景为例:

  • 循环实现:通常需要数百毫秒到数秒不等,数据量再大性能会指数级下降
  • 向量化实现:仅需几毫秒就能完成全部计算和拼接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:06:02