如何在Pandas中对相关矩阵的正负值分别按行求和
实现代码
你可以直接用Pandas的布尔索引加按行求和实现,代码如下:
import pandas as pd # 假设你已经通过df.corr()得到了相关矩阵corr_mat # 1. 按行统计所有正相关值的总和 positive_sum = corr_mat[corr_mat > 0].sum(axis=1) # 2. 按行统计所有负相关值的总和 negative_sum = corr_mat[corr_mat < 0].sum(axis=1) # 3. 拼接结果并调整列名 result = pd.DataFrame({ "PositiveCorr": positive_sum, "NegativeCorr": negative_sum }).reset_index(names="Variable") # 输出验证 print(result)
效果验证
用你给出的示例相关矩阵测试:
# 构造示例相关矩阵 corr_mat = pd.DataFrame( [[1.00, -0.044, -0.8]], columns=["A", "B", "C"], index=["A"] )
运行上述代码后输出结果和你要求的格式完全一致:
Variable PositiveCorr NegativeCorr 0 A 1.00 -0.844
逻辑说明
- 布尔索引
corr_mat > 0会生成和相关矩阵维度一致的布尔值矩阵,仅大于0的位置为True,筛选后非正数值会变为NaN,按行求和时自动忽略NaN,即可得到所有正相关值的总和 - 负相关值的统计逻辑同理,筛选小于0的数值求和即可
- 该逻辑默认包含变量自身的相关系数1.0(相关矩阵对角线值),如果你不需要统计自相关,可在计算前先将对角线置为空值:
import numpy as np np.fill_diagonal(corr_mat.values, np.nan)
内容的提问来源于stack exchange,提问作者sinha-shaurya
相关产品推荐
相关产品推荐

