我有一个成对矩阵:
- >>> m
- a b c d
- a 1.0 NaN NaN NaN
- b 0.5 1.0 NaN NaN
- c 0.6 0.0 1.0 NaN
- d 0.5 0.4 0.3 1.0
我想用右下角的值替换右上角的NaN:
- >>> m2
- a b c d
- a 1.0 0.5 0.6 0.5
- b 0.5 1.0 0.0 0.4
- c 0.6 0.0 1.0 0.3
- d 0.5 0.4 0.3 1.0
我可以通过交换列和索引来做到这一点:
- cols = m.columns
- idxs = m.index
- for c in cols:
- for i in idxs:
- m[i][c] = m[c][i]
但是我的实际数据很慢,而且我确信有一种方法可以一步到位.我知道我可以使用“m.T”生成右上角版本,但我不知道如何用非NaN值替换NaN以获得完整的矩阵.在numpy中可能只有一步到位的方法,但我不知道矩阵代数.
解决方法
(
docs)怎么样:
- >>> df.combine_first(df.T)
- a b c d
- a 1.0 0.5 0.6 0.5
- b 0.5 1.0 0.0 0.4
- c 0.6 0.0 1.0 0.3
- d 0.5 0.4 0.3 1.0