Набор данных Поворот нескольких связанных записей в одну - PullRequest
0 голосов
/ 19 января 2020

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

df = pd.DataFrame([('Adel', "Subj1", 3.50  ,2.57),
                   ('Adel', "Subj2", 2.75  ,3.6  ),

                   ('Alexa',"Subj1", 1.75  ,3.25) ,
                   ('Alexa',"Subj3", 3.15  ,2.25) ], 
                  columns=('Name', "Subj","Med", "Ach" ))

Я разработал длинную инструкцию l oop и у меня есть нижняя таблица, но я подумал, что, возможно, есть лучший способ. enter image description here

Есть какой-нибудь ярлык для такой сводной таблицы? Конечно, у меня могут отсутствовать данные, поскольку не все студенты посещают все курсы.

1 Ответ

1 голос
/ 19 января 2020

Вы можете сделать:

df2=df.pivot(index="Name", columns="Subj", values=["Med", "Ach"]).swaplevel(0,1, axis=1)
#flatten index - I assumed that's what you're going for:
df2.columns=["_".join(el) for el in df2.columns] 

Вывод:

       Subj1_Med  Subj2_Med  ...  Subj2_Ach  Subj3_Ach
Name                         ...
Adel        3.50       2.75  ...        3.6        NaN
Alexa       1.75        NaN  ...        NaN       2.25
...