#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']
и перед вычислением ковариационной матрицы.