Как отфильтровать DataFrame pandas и сохранить определенные элементы?

У меня есть кадр данных pandas, который представляет собой корреляционную матрицу 50x50. На следующем рисунке вы можете увидеть, что у меня есть в качестве примера

введите здесь описание изображения

Что я хотел бы сделать, если это, конечно, возможно, так это создать новый фрейм данных, в котором есть только элементы старого, которые выше 0,5 или ниже -0,5, что указывает на сильную линейную связь, но не 1, чтобы избежать частей дисперсии.

Я не думаю, что то, что я прошу, точно возможно, потому что, конечно, переменная x0 не будет иметь таких же сильных отношений, как x1 и т. д., поэтому новый фрейм данных не будет выглядеть очень хорошо.

Но есть ли способ быстро просканировать этот фрейм данных, найти значения, которые я упомянул, и, возможно, хотя бы вставить их в массив?

Любое понимание будет полезно. Спасибо


person thenac    schedule 22.01.2020    source источник


Ответы (1)


вы не можете смотреть на матрицу корреляции, если хотите отбросить слишком низкие пары корреляции. Одна вещь, которую вы можете сделать, это сложить кадр и сохранить соответствующую пару корреляции.

имеющий (случайно сгенерированный в качестве примера):

          0         1         2         3         4
0  0.038142 -0.881054 -0.718265 -0.037968 -0.587288
1  0.587694 -0.135326 -0.529463 -0.508112 -0.160751
2 -0.528640 -0.434885 -0.679416 -0.455866  0.077580
3  0.158409  0.827085  0.018871 -0.478428  0.129545
4  0.825489 -0.000416  0.682744  0.794137  0.694887

вы могли бы сделать:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.uniform(-1, 1, (5, 5)))
df = df.stack()
df = df[((df > 0.5) | (df < -0.5)) & (df != 1)]


0  1   -0.881054
   2   -0.718265
   4   -0.587288
1  0    0.587694
   2   -0.529463
   3   -0.508112
2  0   -0.528640
   2   -0.679416
3  1    0.827085
4  0    0.825489
   2    0.682744
   3    0.794137
   4    0.694887
person Steven G    schedule 22.01.2020