R语言如何依据DF2的权重对DF1的对应指标列执行加权相乘计算
Pandas(Python) 实现方案
核心思路是先将DF2转换为「指标名: 权重」的映射结构,再对DF1的指标列做批量匹配乘法,非指标字段保留原值。
- 构造权重映射字典
import pandas as pd # 将DF2的Indicators列转为索引,提取Weight列转为字典 weight_map = DF2.set_index('Indicators')['Weight'].to_dict()
- 筛选待计算的指标列
# 不需要参与计算的字段,根据实际情况调整 non_calc_cols = ['Country', 'Year'] # 提取所有需要乘权重的指标列 indicator_cols = [col for col in DF1.columns if col not in non_calc_cols]
- 批量计算加权值
# 对应列匹配权重相乘,直接修改原DF1的指标列,也可以赋值给新的DataFrame DF1[indicator_cols] = DF1[indicator_cols].mul(pd.Series(weight_map))
效果验证(对应示例场景):
输入DF1行数据:Country=Brazil、Year=2015、Indicator 1=0.34、Indicator 2=0.76
输入DF2权重:Indicator 1=0.5、Indicator 2=0.2
输出结果行:Country=Brazil、Year=2015、Indicator 1=0.17、Indicator 2=0.152
R 实现方案
library(dplyr) library(tibble) # 把DF2转为指标名为键、权重为值的命名向量 weight_vec <- deframe(DF2) # 对所有指标列批量乘对应权重 result <- DF1 %>% mutate(across(all_of(names(weight_vec)), ~ .x * weight_vec[cur_column()]))
注意事项
- 需保证DF2的
Indicators取值和DF1的指标列名完全一致,大小写、空格、拼写差异会导致匹配失败出现空值 - 若存在DF1指标列未在DF2中记录权重的情况,可提前过滤列或补充默认权重避免计算异常
内容的提问来源于stack exchange,提问作者JuliaStackOverflow
相关产品推荐
相关产品推荐

