Используйте m1
положительные значения и m2
маски отрицательных значений, затем stack
и drop_duplicates
как:
m1 = (df.corr().gt(0.5)) & (df.corr().ne(1))
m2 = (df.corr().lt(-0.5)) & (df.corr().ne(-1))
df.corr()[m1|m2].stack().drop_duplicates().round(3).to_dict()
ИЛИ
d = df.corr()
m = ((d>0.5)&(d!=1))|((d<-0.5)&(d!=-1))
d[m].stack().drop_duplicates().round(3).to_dict()
Оба производят вывод:
{('CRIM', 'ZN'): -0.199,
('CRIM', 'INDUS'): 0.404,
('CRIM', 'NOX'): 0.418,
('CRIM', 'RM'): -0.22,
('CRIM', 'AGE'): 0.351,
('ZN', 'INDUS'): -0.534,
('ZN', 'NOX'): -0.517,
('ZN', 'RM'): 0.312,
('ZN', 'AGE'): -0.57,
('INDUS', 'NOX'): 0.764,
('INDUS', 'RM'): -0.392,
('INDUS', 'AGE'): 0.645,
('NOX', 'RM'): -0.302,
('NOX', 'AGE'): 0.731,
('RM', 'AGE'): -0.24}