首页 > 解决方案 > 数据集将多个相关记录转换为单个记录

问题描述

我在学生分数中有数字数据,我希望每个学生都有一个记录,他的所有相关数据都分布在许多记录中。

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" ))

我开发了一个很长的循环语句并在下面的表格中,但我认为可能有更好的方法。 在此处输入图像描述

这样的数据透视表有什么捷径吗?当然,我可能缺少数据,因为并非所有学生都参加所有课程。

标签: pythonpivotpivot-table

解决方案


你可以做:

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

推荐阅读