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

如何实现dataframe各列与另一dataframe同列逐行值相乘生成宽表

Python(pandas)实现

import pandas as pd
import numpy as np

# 此处假设你已经完成df1、df2的读取加载
# 利用numpy广播运算实现批量计算,避免循环开销
arr1 = df1.values  # 维度:(500, 3)
arr2 = df2.values  # 维度:(4338, 3)

# 维度扩展后相乘,结果维度为(500, 4338, 3)
result_arr = arr1[:, np.newaxis, :] * arr2[np.newaxis, :, :]
# 调整维度为(500, 4338*3)即(500, 13014)
result_arr = result_arr.reshape(df1.shape[0], -1)

# 生成对应列名,格式为「df2行名_列名」,例:V1_A、V1_B、V1_C、V2_A...
col_names = [f"{row_id}_{col}" for row_id in df2.index for col in df2.columns]
df3 = pd.DataFrame(result_arr, index=df1.index, columns=col_names)

R 实现

library(purrr)
library(dplyr)

# 此处假设你已经完成df1、df2的读取加载
# 遍历df2每一行计算乘积,按列拼接得到最终结果
df3 <- map_dfc(seq(nrow(df2)), function(i) {
  # 提取df2当前行的系数
  coeff <- df2[i, ]
  # 同列相乘,系数自动广播到df1所有行
  temp_res <- df1 * coeff[rep(1, nrow(df1)), ]
  # 重命名列,标记对应df2的行
  colnames(temp_res) <- paste0(rownames(df2)[i], "_", colnames(temp_res))
  return(temp_res)
})

两种方案的计算逻辑完全符合要求,最终输出的df3维度为500行×13014列,列名可根据使用习惯自行调整命名规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:08