Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧-通过用列值替换值来合并行_Python_Python 2.7_Pandas - Fatal编程技术网

Python 数据帧-通过用列值替换值来合并行

Python 数据帧-通过用列值替换值来合并行,python,python-2.7,pandas,Python,Python 2.7,Pandas,为这个模棱两可的标题道歉 我有一个学生数据集,我想对学生运行一个聚类算法 数据集的结构使得每个学生都有一行以上的数据,每个数据都有年龄、年级(9年级、10年级等)以及学生正在上的一个班级和该班级的最终分数 在预处理过程中,我使用pd.get_假人为学生学习的每门课获取一列布尔值,分数列保持不变 我希望合并这些行,使每个学生只有一行(因为我希望聚集在学生上,而不是每行),而不是每个班级1或0,我希望该班级的最终分数出现在班级列中,然后删除分数列 我将尝试举一个例子: Name, Age, Grad

为这个模棱两可的标题道歉

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

数据集的结构使得每个学生都有一行以上的数据,每个数据都有年龄、年级(9年级、10年级等)以及学生正在上的一个班级和该班级的最终分数

在预处理过程中,我使用pd.get_假人为学生学习的每门课获取一列布尔值,分数列保持不变

我希望合并这些行,使每个学生只有一行(因为我希望聚集在学生上,而不是每行),而不是每个班级1或0,我希望该班级的最终分数出现在班级列中,然后删除分数列

我将尝试举一个例子:

Name, Age, Grade, Class, Score
John, 16, 9, Biology, 98
John, 16, 9, Algebra, 95
John, 16, 9, French, 96
在以下列中应用pd.get_假人的结果:

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
是否有一种比迭代行并在数据框中为每个学生手动创建新行更有效的方法?

您可以使用++:


非常感谢你!有没有一种方法可以在不详细说明具体列的情况下实现这一点?我不想做一个复杂的例子,所以如果这是相关信息,我深表歉意——还有其他专栏不需要转换。例如,参加课外活动——假设我们有体操、游泳和足球。使用pd.get_假人,它们将转换为活动体操等。它们应保持为二进制列。可以仅按位置选择列,更改
(df.set_索引(['Name','Age','Grade','Class'])['Score']
df=(df.set_索引(df.columns[:4].tolist())[df.columns[4]]
。我看到你编辑了评论。你能用预期的输出更改你的数据吗?谢谢!我看到我的示例中有点不清楚(因为我不能透露真实的细节而编造了一个示例)一个更好的例子是:Prev comment搞糟了——我有大约60列,其中只有少数几列我想转换成这种格式。到目前为止,pandas pivot_表做得很好(数据看起来与您的类似),但我希望解决的另一个挑战是:'pd.pivot_表(df,index=['Name',columns=['Score',value=['Age','Grade']分数年龄年级班级代数生物学法语代数生物学法语代数生物学法语姓名约翰95 98 96 16 16 16 9 9'
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