Pandas实现类似Excel Vlookup加权求和新增列仅返回最后迭代值如何解决
错误原因
你的代码里index变量每次循环都会被新的单列乘积结果覆盖,没有做累加操作,循环结束后只保留了最后一个股票列(WMT)的计算结果,因此最终Ind列只有WMT的乘积值,没有所有列的累加结果。
解决方案
方案1:修改原有循环逻辑
在循环前初始化累加值,每次循环将对应列的乘积累加到结果中:
# 初始化Ind列为0 dfMerged["Ind"] = 0 for col in dfMerged.columns: if col != "Date": # 匹配对应股票的PPerc权重 weight = dfH.loc[dfH["TICKER"] == col, "PPerc"].values[0] # 累加乘积 dfMerged["Ind"] += weight * dfMerged[col]
方案2:使用pandas向量化操作(更简洁高效)
无需手动循环,利用pandas的自动对齐特性直接批量计算:
# 将股票代码和对应权重转为映射字典 weight_map = dfH.set_index("TICKER")["PPerc"].to_dict() # 提取所有股票列,按列匹配权重后按行求和得到Ind值 dfMerged["Ind"] = dfMerged.drop(columns="Date").mul(weight_map).sum(axis=1)
该写法逻辑更简洁,也避免了手动循环的变量覆盖问题,数据量较大时性能优势更明显。
内容的提问来源于stack exchange,提问作者Billy101
相关产品推荐
相关产品推荐

