Python 熊猫找到了row+;具有条件的元素的列名称

Python 熊猫找到了row+;具有条件的元素的列名称,python,pandas,numpy,Python,Pandas,Numpy,我有一个关联的数据框架。我在数据框中搜索,找到大于阈值0.5的相关性,然后返回符合条件的元素的列名和行名(都是字符串) 目前,我可以将相关矩阵转换为大于阈值的值,然后使用以下方法将所有其他值转换为NaN: 相关性[np.abs(相关性)>0.5] 现在我有了这个匹配查询和NaNs的数字矩阵,如何获得值不是NaN的每个元素的行+列名称?我相信您需要创建系列,然后为新列命名,为多索引中的列命名: np.random.seed(456) correlations = pd.DataFrame(np

我有一个关联的数据框架。我在数据框中搜索,找到大于阈值
0.5
的相关性,然后返回符合条件的元素的列名和行名(都是字符串)

目前,我可以将相关矩阵转换为大于阈值的值,然后使用以下方法将所有其他值转换为
NaN

相关性[np.abs(相关性)>0.5]

现在我有了这个匹配查询和
NaN
s的数字矩阵,如何获得值不是
NaN
的每个元素的行+列名称?

我相信您需要创建
系列
,然后为新列命名,为
多索引中的列命名:

np.random.seed(456) 

correlations = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
print (correlations)
          A         B         C
0  0.248756  0.163067  0.783643
1  0.808523  0.625628  0.604114
2  0.885702  0.759117  0.181105
3  0.150169  0.435679  0.385273
4  0.575710  0.146091  0.686593

s = correlations.stack()
df = s[np.abs(s) > 0.5].rename_axis(('idx','col')).reset_index(name='val')
print (df)
   idx col       val
0    0   C  0.783643
1    1   A  0.808523
2    1   B  0.625628
3    1   C  0.604114
4    2   A  0.885702
5    2   B  0.759117
6    4   A  0.575710
7    4   C  0.686593
详细信息

print (s)
0  A    0.248756
   B    0.163067
   C    0.783643
1  A    0.808523
   B    0.625628
   C    0.604114
2  A    0.885702
   B    0.759117
   C    0.181105
3  A    0.150169
   B    0.435679
   C    0.385273
4  A    0.575710
   B    0.146091
   C    0.686593
dtype: float64

或者您可以使用
melt

correlations.where(correlations.abs().gt(0.5)).reset_index().melt('index').dropna()
Out[357]: 
    index variable     value
1       1        A  0.808523
2       2        A  0.885702
4       4        A  0.575710
6       1        B  0.625628
7       2        B  0.759117
10      0        C  0.783643
11      1        C  0.604114
14      4        C  0.686593