如何实现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
相关产品推荐
相关产品推荐

