Python中使用pd.melt按行名列名转换协方差表为熔融格式
协方差矩阵转熔融格式实现方案
使用pd.melt()即可实现需求,只需提前将行索引转为普通列即可完成行列名的绑定。
完整操作代码
import pandas as pd # 构造示例协方差矩阵 cov_df = pd.DataFrame( [[1, 0.6, 0.5], [0.6, 1, 0.3], [0.5, 0.3, 1]], index=["AAPL", "COM", "TTD"], columns=["AAPL", "COM", "TTD"] ) # 1. 将行索引转为普通列,命名为stock1 cov_df = cov_df.reset_index(names="stock1") # 2. 调用melt完成转换 melted_cov = pd.melt( cov_df, id_vars="stock1", # 保留stock1作为第一维度标识 var_name="stock2", # 原列名转为第二维度列 value_name="cov" # 原数值转为协方差值列 )
输出效果
如果需要和你示例一致的无表头、无索引的输出格式,执行以下代码即可:
print(melted_cov.to_string(index=False, header=False))
输出结果:
AAPL AAPL 1.0 AAPL COM 0.6 AAPL TTD 0.5 COM AAPL 0.6 COM COM 1.0 COM TTD 0.3 TTD AAPL 0.5 TTD COM 0.3 TTD TTD 1.0
注:你示例中出现的COMM、TDD属于笔误,实际输出为正确的股票代码
核心逻辑说明
pd.melt默认仅处理DataFrame的普通列,行索引不会被自动纳入转换逻辑,因此需要先通过reset_index()把行名转成普通列id_vars参数用于指定转换过程中保留不动的列,这里保留行名转来的第一维度股票代码var_name、value_name分别指定原列名、原数值转换后的列名,可按需修改
内容的提问来源于stack exchange,提问作者Patrick McKercher
相关产品推荐
相关产品推荐

