我在 DataFrame 中有一个对称的正方形 pandas :

a = np.random.rand(3, 3)
a = (a + a.T)/2
np.fill_diagonal(a, 1.)
a = pd.DataFrame(a)

看起来像这样:
          0         1         2
0  1.000000  0.747064  0.357616
1  0.747064  1.000000  0.631622
2  0.357616  0.631622  1.000000

如果我应用 stack 方法,我会得到很多冗余信息(包括我不感兴趣的对角线):
0  0    1.000000
   1    0.747064
   2    0.357616
1  0    0.747064
   1    1.000000
   2    0.631622
2  0    0.357616
   1    0.631622
   2    1.000000

有没有办法只使用“纯” pandas 获得下(或上)三角形?
1  0    0.747064
2  0    0.357616
   1    0.631622

最佳答案

你可以使用 mask

In [278]: a.mask(np.triu(np.ones(a.shape)).astype(bool)).stack()
Out[278]:
1  0    0.747064
2  0    0.357616
   1    0.631622
dtype: float64

或者使用 where
In [285]: a.where(np.tril(np.ones(a.shape), -1).astype(bool)).stack()
Out[285]:
1  0    0.747064
2  0    0.357616
   1    0.631622
dtype: float64

关于python - 堆叠一个方形 DataFrame 以仅保留上/下三角形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45631288/

10-12 18:09