Как из матрицы корреляций получить названия полей с коэффициентом больше заданного

Есть матрица корреляций; хочу из нее вытащить названия столбцов со значениями больше, например, чем 0.8:

corr = elem.corr()
for i, j in list(zip(np.arange(corr.shape[0]), np.arange(corr.shape[1]))):
    index_i, index_j = [], []
    if (i!=j) & (corr.iloc[i,j]>0.8): #для всех недиагональных элементов и тех, что больше 0.8
        index_i.append(i) #добавляем индекс по i
        index_j.append(j) #добавляем индекс по j

#по полученным индексам вернуть названия полей данный код выдает ошибку
elem_i, elem_j = [], []
for i, j in list(zip(index_i, index_j)):
    elem_i.append[corr.index[index_i[i]]]
    elem_j.append[corr.index[index_j[j]]]
elem_i, elem_j

но в результате списки пустые. вопрос: почему и как это исправить? а та часть кода, которая должна ворзврашщать названия поле, выдает ошибку:

TypeError: 'builtin_function_or_method' object is not subscriptable

заранее спасибо за ответ.

вот сама таблица https://github.com/catauggie/materials_classification/blob/master/temp/output.xlsx


Ответы (1 шт):

Автор решения: splash58

используя numpy предпочтительнее воздерживаться от явных циклов

import numpy as np   
corr = np.array([[1, 2, 3], [4, 5, 6], [7,8,9]])

# исключим главную диагональ
mask = np.ones(corr.shape, dtype=bool)
np.fill_diagonal(mask, 0)

# выберем индексы, где больше, например, 2
index_i, index_j = np.where((corr > 2) & mask)
print(index_i, index_j)    #  [0 1 1 2 2] [2 0 2 0 1]
→ Ссылка