Для создания исходного DataFrame I:
Создан следующий список словарей:
tbl = [ {'P1': '**4**', 'P2': '**1**', 'T1': '**2**', 'S1': '**5**', 'S2': '**5**'},
{'P1': 1, 'P2': 1, 'T1': 5, 'S1': 1, 'S2': 1},
{'P1': 3, 'P2': 2, 'T1': 4, 'S1': 5, 'S2': 4},
{'P1': 2, 'P2': 5, 'T1': 5, 'S1': 4, 'S2': 5}]
Обратите внимание, что значения в первой строке прилагаются в кавычках (в отличие от вашего образца), в противном случае был бы неверный синтаксис.
Создан фрейм данных:
df = pd.DataFrame({'rating_per_subject': tbl})
Обратите внимание, что пока ваш DataFrame содержит столбец single . Но так как ваш код содержит вызов атрибута T
(преобразование), исходный DataFrame должен иметь форму "true-2D", то есть он должен содержать несколько строк и столбцов.
На мой взгляд, пропущенный шаг - разбить каждую строку на столбцы, то есть ключи словаря следует преобразовать в имена столбцов, а значения словаря - в значения столбцов.
Вы можете сделать это, выполнив:
df2 = df.rating_per_subject.apply(pd.Series)
что дает:
P1 P2 T1 S1 S2
0 **4** **1** **2** **5** **5**
1 1 1 5 1 1
2 3 2 4 5 4
3 2 5 5 4 5
Теперь, когда вы транспонируете этот DataFrame (прогон df2.T
), вы получите:
0 1 2 3
P1 **4** 1 3 2
P2 **1** 1 2 5
T1 **2** 5 4 5
S1 **5** 1 5 4
S2 **5** 1 4 5
Предположим, что subjects = ['P1', 'P2', 'T1', 'S1', 'S2', 'R1', 'R2']
.
Когда вы запустите df2.T.reindex(subjects)
, вы получите:
0 1 2 3
P1 **4** 1 3 2
P2 **1** 1 2 5
T1 **2** 5 4 5
S1 **5** 1 5 4
S2 **5** 1 4 5
R1 NaN NaN NaN NaN
R2 NaN NaN NaN NaN
Может быть, это то, что вы ищете?