我有一个4300 * 4300对角线对称的pandas数据帧,其中1为对角线值。 它是一个相关矩阵。我想读取该矩阵的一半以及与该值相关联的相应的2列名称。
我已经编写了2个嵌套for循环来读取值和列名称到3个列表, 但这需要很长时间。有没有有效的方法。
预期输出数据框:
column1, column2, corr_val
答案 0 :(得分:2)
制作相关矩阵
np.random.seed([3, 1415])
df = pd.DataFrame(np.random.rand(10, 5), columns=list('ABCDE')).corr()
df
A B C D E
A 1.000000 0.309111 0.219242 -0.239779 0.253331
B 0.309111 1.000000 0.435033 0.475270 0.881688
C 0.219242 0.435033 1.000000 0.005637 0.394912
D -0.239779 0.475270 0.005637 1.000000 0.483238
E 0.253331 0.881688 0.394912 0.483238 1.000000
np.triu_indices
i, j = np.triu_indices_from(df, k=1)
d = pd.DataFrame(dict(
ROW=df.index[i],
COL=df.columns[j],
VAL=df.values[i, j]
))
d
COL ROW VAL
0 B A 0.309111
1 C A 0.219242
2 D A -0.239779
3 E A 0.253331
4 C B 0.435033
5 D B 0.475270
6 E B 0.881688
7 D C 0.005637
8 E C 0.394912
9 E D 0.483238