измените порядок numpy matrix, чтобы выровнять с идентификаторами в фрейме данных

#python #pandas #numpy

#питон #панды #тупой

Вопрос:

У меня есть фрейм данных, df, в котором есть столбец с именем id, где каждое значение уникально.

   df

  id    name
  A     abc
  B     bcv
  C     dsf
  D     ere
  E     pmn

  
 

Я передаю этот уникальный набор идентификаторов функции. Функция возвращает две вещи, одна из которых — фрейм данных df_matrix, который также содержит столбец с именем id. Второе, что он возвращает, — это матрица ковариации (массив float64).

  df_matrix

 id    name
  C     dsf
  A     abc
  E     pmn
  B     bcv
 

Каждый идентификатор в df_matrix будет находиться в df, но обратное неверно. Итак, в приведенном выше примере df имеет идентификатор «D», которого нет в df_matrix. Также вы заметите, что порядок отличается

  covariance matrix

     C   A   E   B
  C  1   2   3   4
  A  2   5   7   8
  E  3   7   9   10
  B  4   8   10  11
 

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

результат, который я ищу, это,

     A   B   C   D    E
 A  5   8   2   NaN  7
 B  8   11  4   NaN  10
 C  2   4   1   NaN  3
 D  NaN NaN NaN NaN  Nan
 E  7   10  3   NaN  9
 

Я попытался объединить матрицу с фреймом данных, хотя это выравнивает строки матрицы с фреймом данных, но не корректирует столбцы матрицы. Я не уверен, что лучший способ добиться этого?

Ответ №1:

Это reindex :

 cov_mat.reindex(df['id']).reindex(df['id'], axis=1)
 

Вывод:

 id    A     B    C   D     E
id                          
A   5.0   8.0  2.0 NaN   7.0
B   8.0  11.0  4.0 NaN  10.0
C   2.0   4.0  1.0 NaN   3.0
D   NaN   NaN  NaN NaN   NaN
E   7.0  10.0  3.0 NaN   9.0
 

Обновление Вы также можете установить id в качестве индекса для df2 последующей переиндексации, как df1['id'] и перед вычислением ковариационной матрицы.