pandas dataframe - 通过用列值替换值来合并行

时间:2018-01-24 08:32:06

标签: python python-2.7 pandas

道歉的标题。

我有一个学生数据集,我想对学生运行聚类算法。

数据集的结构使得每个学生有多行,每个学生都有年龄,年级(第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

是否有比迭代行更有效的方法,并为每个学生在数据框中手动创建新行?

1 个答案:

答案 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