如何无需循环将pypfopt生成的weights字典写入MultiIndex DataFrame?
无循环实现权重写入MultiIndex DataFrame的方法
你可以通过构造匹配MultiIndex结构的Series或直接指定列元组的方式,替代显式循环完成赋值,以下是两种简洁实现:
方法1:利用Series重构索引后赋值
把weights字典转为Series,再给Series的索引补上MultiIndex的上层层级,最后直接赋值给目标行:
import pandas as pd # 将weights转为Series,并构造完整的MultiIndex列标签 weights_series = pd.Series(weights) weights_series.index = pd.MultiIndex.from_tuples( [(df_name, cov, freq, w, parameter, beta, ticker) for ticker in weights_series.index] ) # 直接赋值给目标行 results_df.loc[date] = weights_series
方法2:直接构造列元组列表赋值
先生成包含完整MultiIndex的列元组列表,再对应赋值权重值:
# 生成完整的MultiIndex列标签列表 target_cols = [(df_name, cov, freq, w, parameter, beta, ticker) for ticker in weights] # 提取权重值列表 weight_vals = list(weights.values()) # 一次性赋值 results_df.loc[date, target_cols] = weight_vals
原代码无法运行的原因
你最初的代码试图把字典直接赋值给MultiIndex的前6层列组,但pandas无法自动将字典的键映射到第7层列索引,必须明确指定完整的MultiIndex列标签才能完成匹配。
内容的提问来源于stack exchange,提问作者Lucas Voltolini
相关产品推荐
相关产品推荐

