выборка пар (строка-столбец) по значению ячейки в pandas
Всем привет! Подскажите, допустим у меня есть dataFrame pandas с такими данными
| name1 | name2 | name3 | |
|---|---|---|---|
| name1 | 1 | 0.96 | 0.65 |
| name2 | 0.96 | 1 | 0.99 |
| name3 | 0.65 | 0.99 | 1 |
Нужно вывести все пары строка-столбец где значения ячейки больше 0.95, не считая главной диагонали. Пары типа name1-name2 и name2-name1 являются одинаковыми.
т.е в данном случае вывод должен быть (name2, name1) и (name2, name3) Вообще это таблица корреляций между переменными и мне нужно вывести сильно-связанные между собой. пробовал типа
correlations = dataframe.corr()
correlations[(correlations > 0.95)]
но, что логично, получаю такую же таблицу, а в моих данных это 168х168 матрица, в ней искать пары неудобно. как получить непосредственно пары строка-столбец?
Ответы (1 шт):
Ну для начала можно получить индексы нужных вам ячеек, исключая главную диагональ:
idx = np.where(df.mask(np.eye(len(df), dtype=bool))>0.95)
затем, превратить их а пары, удаляя дубликаты:
pairs = list(set(tuple(sorted(x)) for x in list(zip(idx[0], idx[1]))))
и все. теперь переводим индексы в имена и получаем результат:
res = []
for i in pairs:
res.append([df.index[i[0]], df.columns[i[1]]])
print(res)
[['name1', 'name2'], ['name2', 'name3']]