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

基于克隆映射填充协方差矩阵DataFrame的缺失值

解决方案

我们可以通过遍历克隆映射表,结合Pandas的行列赋值实现需求,核心是处理克隆项的行/列时应用符号系数,同时单独修正对角线值以保持与被克隆项同号。

步骤说明

  • 遍历每个克隆项,获取对应的被克隆项和符号系数
  • 用被克隆项的列数据乘以符号系数,填充克隆项的列
  • 用被克隆项的行数据乘以符号系数,填充克隆项的行
  • 单独设置克隆项的对角线值,确保与被克隆项的对角线值一致(不受符号影响)

完整代码

import pandas as pd
import numpy as np

# 初始化协方差矩阵
covar_data = {
    'a': [0.04, np.nan, 0.03, np.nan, -0.04],
    'XY': [np.nan, np.nan, np.nan, np.nan, np.nan],
    'b': [0.03, np.nan, 0.09, np.nan, 0.00],
    'YZ': [np.nan, np.nan, np.nan, np.nan, np.nan],
    'c': [-0.04, np.nan, 0.00, np.nan, 0.16]
}
covar_index = ['a', 'XY', 'b', 'YZ', 'c']
covar = pd.DataFrame(covar_data, index=covar_index)

# 初始化克隆映射表
clone_data = {
    'cloned_item': ['a', 'b'],
    'sign': [1, -1]
}
clone_index = ['XY', 'YZ']
df = pd.DataFrame(clone_data, index=clone_index)

# 处理克隆项
for clone in df.index:
    original_item = df.loc[clone, 'cloned_item']
    sign_coeff = df.loc[clone, 'sign']
    original_diag_val = covar.loc[original_item, original_item]
    
    # 填充克隆项的列
    covar[clone] = covar[original_item] * sign_coeff
    # 修正对角线值
    covar.loc[clone, clone] = original_diag_val
    
    # 填充克隆项的行
    covar.loc[clone] = covar.loc[original_item] * sign_coeff
    # 再次修正对角线(行赋值会覆盖之前的列对角线设置)
    covar.loc[clone, clone] = original_diag_val

# 输出结果
print(covar)

输出结果

a    XY     b    YZ     c
a   0.04  0.04  0.03 -0.03 -0.04
XY  0.04  0.04  0.03 -0.03 -0.04
b   0.03  0.03  0.09 -0.09  0.00
YZ -0.03 -0.03 -0.09  0.09  0.00
c  -0.04 -0.04  0.00  0.00  0.16

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:35:58