很抱歉标题模棱两可。
我有一个学生数据集,我想对这些学生运行一个聚类算法。
数据集的结构是这样的:每个学生有多行,每行都有年龄、年级(9、10等)、学生正在选修的单个班级以及该班级的最终分数。
在预处理过程中,我应用pd.get_dummies为学生选修的每个课程获取一个布尔值的列,分数列保持不变。
我想合并行,这样对于每个学生,我只有一行(因为我想对学生进行聚类,而不是每行),并且我希望每个班级的最终分数显示在班级列中,然后删除分数列。
我会试着举一个例子:
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有没有比迭代行并在数据框中为每个学生手动创建新行更有效的方法?
发布于 2018-01-24 16:35:19
您可以使用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 96https://stackoverflow.com/questions/48417950
复制相似问题