python - 将垂直矩阵转换为相关矩阵。 Python

标签 python numpy pandas matrix correlation

我使用pd.DataFrame.corr()方法从我的DataFrame创建一个相关矩阵,做了一些事情,我切断了某些值以获得类似的表到下面的 DF_interactions。我现在想将其恢复为相关矩阵样式,例如下面的 DF_corr 。

使用pandasnumpysklearnscipy最有效的方法是什么?将交互表转换为相关式矩阵?

我已经包含了填充此数据框的天真的方法...

#Create table of interactions 
DF_interactions=pd.DataFrame([["A","B",0.1],
                              ["A","C",0.4],
                              ["B","C",0.3],
                              ["A","D",0.4]],columns=["var1","var2","corr"])
#   var1 var2  corr
# 0    A    B   0.1
# 1    A    C   0.4
# 2    B    C   0.3
# 3    A    D   0.4
n,m = DF_interactions.shape
#4 3
#Show which labels would be in correlation matrix for rows/columns
nodes = set(DF_interactions["var1"]) | set(DF_interactions["var2"])
#set(['A', 'C', 'B', 'D'])

#Create empty DataFrame to fill
DF_corr = pd.DataFrame(np.zeros((len(nodes),len(nodes))), columns = sorted(nodes),index=sorted(nodes))
#    A  B  C  D
# A  0  0  0  0
# B  0  0  0  0
# C  0  0  0  0
# D  0  0  0  0

#Naive way to fill it
for i in range(n):
    var1 = DF_interactions.iloc[i,0]
    var2 = DF_interactions.iloc[i,1]
    corr = DF_interactions.iloc[i,2]
    DF_corr.loc[var1,var2] = corr
    DF_corr.loc[var2,var1] = corr
#      A    B    C    D
# A  0.0  0.1  0.4  0.4
# B  0.1  0.0  0.3  0.0
# C  0.4  0.3  0.0  0.0
# D  0.4  0.0  0.0  0.0

最佳答案

假设您的交互表仅包含一半的相关性(如果不确定,请添加 .drop_duplicates()):

corr = pd.concat([DF_interactions, DF_interactions.rename(columns={'var1': 'var2', 'var2': 'var1'})])

然后使用.pivot():

corr = corr.pivot(index='var1', columns='var2', values='corr')

var2    A    B    C    D
var1                    
A     NaN  0.1  0.4  0.4
B     0.1  NaN  0.3  NaN
C     0.4  0.3  NaN  NaN
D     0.4  NaN  NaN  NaN

如果您希望使用 0 值来弥补缺失的交互,请使用 .fillna(0)

关于python - 将垂直矩阵转换为相关矩阵。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829023/

相关文章:

python-3.x - TypeError : iteration over a 0-d array, 使用 numpy

python - 在 NumPy 数组上调用 `np.asarray' 是否有很大的开销?

matlab - numpy reshape问题(matlab比较)

python - 如何将函数应用于 Pandas 数据框的两列和两个 if 函数

python - 提取一个列表,其值的位置由 Pandas DataFrame 中另一列中的值指示

python-3.x - Python Pandas - 根据索引、列使用字典更新行

python - 绘制来自 Pandas 的某些数据点

python - Python 中是否有预定义的 URL 类?

python - Django 好像有缓存?

python - Seaborn Factorplot 的对数网格线