Как последовательно отсортировать столбцы DataFrame из первого столбца? - PullRequest
0 голосов
/ 21 марта 2019

Я отсортировал столбцы df по максимальному значению строк.

dff = centroids.reindex(df.sum().sort_values(ascending=False).index, axis=1)

print(dff)

    13        9         2         6         7         0         5
0   0.423586  0.472548  0.366301  0.423973  0.312807  0.476197  0.384652   
1   0.639636  0.734712  0.503772  0.600164  0.416451  0.730942  0.515370
2   0.749716  0.835071  0.549806  0.637331  0.419558  0.782306  0.507648
3   0.817579  0.844361  0.577874  0.621483  0.408825  0.727671  0.458346   
4   0.890916  0.831640  0.631127  0.611741  0.438974  0.654338  0.430330
5   0.952046  0.802077  0.694321  0.601616  0.496798  0.572743  0.423915
6   0.995009  0.768293  0.749186  0.590912  0.553378  0.500568  0.427607   
7   1.000000  0.718386  0.781207  0.570253  0.598234  0.425387  0.436355   
8   0.993004  0.690660  0.779607  0.550149  0.600459  0.396121  0.422891   

Теперь мне нужно отсортировать эти столбцы по корреляции между собой, но выполняем это последовательно.Поэтому определите второй столбец по наилучшей корреляции с первым, определите третий столбец по наилучшей корреляции со вторым и так далее.А также я хочу сохранить оригинальные метки столбцов

У меня есть некоторые мысли по этому поводу, но, поскольку я новичок в коде Python не работает

k_num = 7 # number of columns in df
def corelation(df):
   col = 1
   for column in dff.columns[col:]:
       dff.reindex(dff.corr().sort_values(dff.columns[col], ascending=False).index, axis = 1)
   col += 1
   if col == k_num:
      return(df)

Я буду очень признателен, если некоторая помощьмне

1 Ответ

1 голос
/ 21 марта 2019

Мы можем создать список, который будет содержать необходимый порядок столбцов.Давайте назовем его l и сначала заполним его первым столбцом 0.Затем мы итеративно находим максимальную корреляцию между столбцом, хранящимся как последний элемент в l, и подмножеством DataFrame, которое исключает столбцы, которые уже находятся в l, добавляя на каждом шаге новый столбец с максимальной корреляцией к списку l.Когда больше не осталось столбцов, l будет содержать необходимый порядок столбцов, а df[l] даст нам DataFrame со столбцами, отсортированными по максимальной корреляции:

np.random.seed(42)
df = pd.DataFrame(np.random.randn(10, 10))

l = [0]
while len(l) < len(df.columns):
    i = df[df.columns.difference(l)].corrwith(df[l[-1]]).abs().idxmax()
    l += [i]

df[l]
...