我有一个矩阵数据框架,我只想得到对角线上的后半部分的值(所以下面例子中1下的所有值)。我希望结果是一个新的数据帧,其中一列列出了所有这些值,但我不确定如何处理。
我的df的缩写版本:
Word toxin sloppy grief
toxin 1 -0.03 -0.06
sloppy -0.03 1 0.09
grief -0.06 0.09 1理想的df:
Column
-0.03
-0.06
0.09任何帮助都是非常感谢的!
发布于 2017-01-12 05:03:48
您可以使用np.tril_indices来获取下三角元素的索引。然后使用NumPy索引(例如values[np.tril_indices(...)])来获取数组中的这些值:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Word': ['toxin', 'sloppy', 'grief'],
'grief': [-0.059999999999999998, 0.089999999999999997, 1.0],
'sloppy': [-0.029999999999999999, 1.0, 0.089999999999999997],
'toxin': [1.0, -0.029999999999999999, -0.059999999999999998]})
values = df[df['Word']].values
lower_triangular = values[np.tril_indices(values.shape[0], -1)]
print(pd.DataFrame({'Column': lower_triangular})收益率
Column
0 -0.03
1 -0.06
2 0.09发布于 2017-01-12 06:01:30
numpy.tril_indices
与@unutbu的答案类似,但使用多索引保留索引
v = df.values
i, j = np.tril_indices_from(v, -1)
pd.Series(v[i, j], [df.index[i], df.columns[j]])
Word
sloppy toxin -0.03
grief toxin -0.06
sloppy 0.09
dtype: float64numpy pandas mask stack + broadcasting + +
rng = np.arange(len(df))
df.mask(rng[:, None] <= rng).stack()
Word
sloppy toxin -0.03
grief toxin -0.06
sloppy 0.09
dtype: float64https://stackoverflow.com/questions/41600536
复制相似问题