pandas为具有条件的元素查找row + col名称

时间:2018-03-10 20:28:10

标签: python pandas numpy

我有一个关联的熊猫数据框。我正在搜索数据框以查找大于阈值0.5的相关性,然后返回与条件匹配的列名称和行名称(两者都是字符串)。

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

correlations[np.abs(correlations) > 0.5]

既然我有这个与我的查询和NaN匹配的数字矩阵,我如何得到值为NaN的每个元素的行+列名?

2 个答案:

答案 0 :(得分:3)

我认为您boolean indexing需要stack Seriesrename_axis需要reset_index https://serverfault.com/questions/379714/unknown-unsupported-storage-engine-innodb-mysql-ubuntu新列名MultiIndex来自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

<强>详细

messageTable = await MobileService.GetTable<MessageTable>().Where(item => item.User_ID == "specified id").ToEnumerableAsync();

            foreach(var item in messageTable){

                idList.Add(item.User_ID);

            }

            Debug.WriteLine(idList);

答案 1 :(得分:1)

或者您可以使用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