我有:
df=pd.DataFrame({'A':[1,2,3,np.NaN,435,546],
'B':[10,2,3,4,867,23],
'C':[4,5,np.NaN, np.NaN,np.NaN,64]})
df
A B C
0 1.0 10 4.0
1 2.0 2 5.0
2 3.0 3 NaN
3 NaN 4 NaN
4 435.0 867 NaN
5 546.0 23 64.0
我用返回相关矩阵df.corr()
计算相关性。根据文档,相关性删除了 NaN,在计算相关性 (A,B) 时,有 5 个值可供选择,而相关性 (A,C) 有 3 个值。
我运行它是为了根据每个配对获取元素的数量。
for i in range(df.shape[1]):
for j in range(df.shape[1]):
if j==i: continue
print(df.columns[i],df.columns[j],df.iloc[:,np.r_[i,j]].dropna().shape)
A B (5, 2)
A C (3, 2)
B A (5, 2)
B C (3, 2)
C A (3, 2)
C B (3, 2)
我如何转换它,以便我可以在与使用df.corr()
的矩阵类似的矩阵中获取它
A B C
A 1.000000 0.508726 0.999916
B 0.508726 1.000000 0.920458
C 0.999916 0.920458 1.000000
您是否正在寻找常见的非 nan 的数量:
s = df.notna().astype(int)
s.T @ s
输出:
A B C
A 5 5 3
B 5 6 3
C 3 3 3