首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在对角线下获取pandas df中的值

在对角线下获取pandas df中的值
EN

Stack Overflow用户
提问于 2017-01-12 04:56:23
回答 2查看 1.6K关注 0票数 2

我有一个矩阵数据框架,我只想得到对角线上的后半部分的值(所以下面例子中1下的所有值)。我希望结果是一个新的数据帧,其中一列列出了所有这些值,但我不确定如何处理。

我的df的缩写版本:

代码语言:javascript
复制
Word    toxin    sloppy  grief
toxin   1       -0.03    -0.06
sloppy  -0.03    1       0.09
grief   -0.06    0.09    1

理想的df:

代码语言:javascript
复制
Column
-0.03
-0.06
0.09

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2017-01-12 05:03:48

您可以使用np.tril_indices来获取下三角元素的索引。然后使用NumPy索引(例如values[np.tril_indices(...)])来获取数组中的这些值:

代码语言:javascript
复制
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})

收益率

代码语言:javascript
复制
   Column
0   -0.03
1   -0.06
2    0.09
票数 6
EN

Stack Overflow用户

发布于 2017-01-12 06:01:30

numpy.tril_indices

与@unutbu的答案类似,但使用多索引保留索引

代码语言:javascript
复制
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: float64

numpy pandas mask stack + broadcasting + +

代码语言:javascript
复制
rng = np.arange(len(df))
df.mask(rng[:, None] <= rng).stack()

Word          
sloppy  toxin    -0.03
grief   toxin    -0.06
        sloppy    0.09
dtype: float64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41600536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档