我有一个关联的熊猫数据框。我正在搜索数据框以查找大于阈值0.5
的相关性,然后返回与条件匹配的列名称和行名称(两者都是字符串)。
目前,我可以将相关矩阵转换为大于阈值的值,然后使用以下所有其他值NaN
:
correlations[np.abs(correlations) > 0.5]
既然我有这个与我的查询和NaN
匹配的数字矩阵,我如何得到值为NaN
的每个元素的行+列名?
答案 0 :(得分:3)
我认为您boolean indexing
需要stack
Series
,rename_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