1 ответ:
Вы можете легко создать матрицу 3x3, используя панд. Создайте фрейм данных
dfиз указанного выше массива и сделайте разворот по третьему столбцу с помощьюpivot_table.Например, если у вас есть следующий словарь
dсписков:{'Fac1': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'], 'Fac2': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 'VarCovar': [1.4, 0.7, 0.3, 0.7, 1.8, 6.3, 0.3, 6.3, 2.4]}Создайте фрейм данных следующим образом:
df = pd.DataFrame(d)А затем:
>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar') Fac2 a b c Fac1 a 1.4 0.7 0.3 b 0.7 1.8 6.3 c 0.3 6.3 2.4С помощью атрибута
valuesв конце возвращает массив NumPy из таблицы:>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar').values array([[ 1.4, 0.7, 0.3], [ 0.7, 1.8, 6.3], [ 0.3, 6.3, 2.4]])
Если у вас нет всех пар, вы можете действовать таким же образом и заполните недостающие значения транспонированной индексной парой:
>>> d = {'Fac1': ['a', 'b', 'c' , 'b', 'c', 'c'], 'Fac2': ['a', 'a', 'a' , 'b', 'b', 'c'], 'VarCovar': [1.4, 0.7, 0.3, 1.8, 6.3, 2.4]} >>> df = pd.DataFrame(d) >>> table = df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar') >>> table.combine_first(table.T) Fac2 a b c Fac1 a 1.4 0.7 0.3 b 0.7 1.8 6.3 c 0.3 6.3 2.4(я взял идею использования
combine_firstиз ответа DSM здесь )
Comments