Python 数据帧中的查找

Python 数据帧中的查找,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,类似于: grades=pd.DataFrame(columns=["person","course_code","grade"],data=[[1,101,2.0],[2,102,1.0],[3,103,3.0],[2,104,4.0],[1,102,5.0],[3,104,2.5],[2,101,1.0]]) 每一行是某一学生在某一学科的成绩 并希望将其转换为另一个如下所示: students=pd.DataFrame(columns=[101,102,103,104],d

我有一个数据帧,类似于:

grades=pd.DataFrame(columns=["person","course_code","grade"],data=[[1,101,2.0],[2,102,1.0],[3,103,3.0],[2,104,4.0],[1,102,5.0],[3,104,2.5],[2,101,1.0]])
每一行是某一学生在某一学科的成绩

并希望将其转换为另一个如下所示:

students=pd.DataFrame(columns=[101,102,103,104],data [[2.0,5.0,"NaN","NaN"],[1.0,1.0,"Nan",4.0],["Nan","Nan",3.0,2.5]])
每一行上都有一名学生(该行的抄本),每个科目都有不同的成绩(每一列都是不同的科目)

我尝试过这样做:

for subj in grades["COURSE_CODE"].unique():
    grades_subj=grades[grades["COURSE_CODE"]==subj]
    grades_subj = grades_subj.set_index("EXPEDIENT_CODE", drop = True)
    for st in grades["EXPEDIENT_CODE"].unique():
        grade_num=grades_subj.loc[st]["GRADE"]
        student.loc[st][subj]=grade_num
但我得到:

KeyError: 'the label [304208] is not in the [index]'
我也尝试过其他方法,但总是会出错

有人能帮我吗?

试试:

grades.pivot_table(index='person', columns='course_code', values='grade')
value
参数允许您选择聚合列

为了回答下面的评论,您可以在索引时添加不同的级别。只需将列表而不是单个字符串传递到
索引
,即可完成此操作。注意:您可以在
列中执行相同的操作。因此,根据您提供的示例

grades.pivot_table(index=['person','school'], columns='course_code', values ='grade')
在此之后,我通常建议您
reset_index()
,除非您能够熟练地使用
multi-index
进行切片和索引

此外,如果对应关系为1:1,则可以使用适当的联接合并两个数据帧


这是关于熊猫的所有信息。

哪一行触发了错误?grade_num=grades_subc.loc[st][“grade”]是的,就是它。不过,您可以添加到文档的链接。@Anderas谢谢您的建议!谢谢这与我给你的示例非常吻合,但是如果我有其他不想透视的列呢?(我希望保留在同一行中的学生信息,与上一个数据帧中的信息相同)我应该在以后合并还是可以只透视某些列?您可以使用参数
value=
选择透视时要聚合的列。请参阅我编辑的答案。如果它不能回答你的问题,请提供一个你想要的小例子。谢谢@GonzaloDonoso。假设我的第一个数据框是:grades=pd.dataframe(columns=[“person”,“school”,“course_code”,“grade”],[1,“a”,101,2.0],[2,“b”,102,1.0],[3,“c”,103,3.0],[2,“b”,101,1.0],[1,“a”,102,5.0],[3,“c”,104,2.5],[2,“b”,101,1.0]),我想保持columns=pd.dataframe(columns=[“school=“school”,101102103104],数据=[“a”,2.0,5.0,“NaN”,“NaN”],[“b”,1.0,1.0,“NaN”,4.0],“c”,“NaN”,“NaN”,3.0,2.5])