Как найти 3 самые сильные корреляционные связи в DataFrame pandas?

У меня есть DataFrame, нужно найти 3 самые сильные корреляционные связи. Как это можно сделать?


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

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

Как-то так, наверное, данных вы не предоставили, поэтому искусственный пример:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(100, 10))
df_corr = df.corr()
corrs = [(df_corr.iloc[row,col], row, col) for row in range(1, 10) for col in range(row)]
max3 = sorted(corrs, key=lambda x: abs(x[0]), reverse=True)[:3]
print(max3)

Возможный вывод:

[(-0.3673189702279594, 3, 2), (0.23791763760252185, 7, 0), (0.20770926613674748, 9, 1)]

Суть:

  • берём корреляции из нижней диагонали матрицы корреляции (ибо она симметричная, а на диагонали у неё вообще единицы),
  • помещаем в кортеж каждый коэффициент корреляции и его координаты в матрице (т.е. сочетание каких это столбцов между собой)
  • сортируем по абсолютному значению коэффициента корреляции
  • берём три максимальных элемента

Если хотите получить названия столбцов, а не их номера, при выводе row, col преобразуйте в df.columns[row] и df.columns[col]. Ну или можете сразу в кортеж их класть.

→ Ссылка