道歉的标题。
我有一个学生数据集,我想对学生运行聚类算法。
数据集的结构使得每个学生有多行,每个学生都有年龄,年级(第9,第10等),学生正在学习的单个班级以及该班级的最终成绩。
在预处理中,我应用pd.get_dummies为每个班级的学生提供一个布尔值,并且得分列保持不变。
我想合并各行,这样每个学生我只有一行(因为我想聚集学生而不是每一行)而不是每个班级的1或0,我想要该班的最终得分出现在类列中,然后删除得分列。
我将尝试提供一个例子:
Name, Age, Grade, Class, Score
John, 16, 9, Biology, 98
John, 16, 9, Algebra, 95
John, 16, 9, French, 96
应用pd.get_dummies会产生以下列:
Name, Age, Grade, Class_Biology, Class_Algebra, Class_French, Score
我对以下结果感兴趣:
Name, Age, Grade, Class_Biology, Class_Algebra, Class_French
John, 16, 9, 98, 95, 96
是否有比迭代行更有效的方法,并为每个学生在数据框中手动创建新行?
答案 0 :(得分:2)
您可以使用set_index
+ unstack
+ add_prefix
:
df = (df.set_index(['Name','Age','Grade', 'Class'])['Score']
.unstack()
.add_prefix('Class_')
.reset_index()
.rename_axis(None, axis=1))
print (df)
Name Age Grade Class_Algebra Class_Biology Class_French
0 John 16 9 95 98 96