我在 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/