在Pandas中展平并创建新列

时间:2014-05-07 08:49:44

标签: python pandas

我有下表:

UserID Course
1      ENGLISH
1      MATH  
2      ENGLISH
2      PHILOSOPHY
3      MATH

我想要下表:

UserID Course1  Course2     Course3
1      ENGLISH  MATH 
2      ENGLISH  PHILOSOPHY
3      MATH  

我应该如何处理熊猫?

请注意,我有成千上万的课程,因此为每门课程创建一列是没有意义的。

1 个答案:

答案 0 :(得分:3)

您可以添加一个包含'课程编号'的列。 (按用户)然后转动它。

df['CourseNr'] = df.groupby('UserID').cumcount().apply(lambda x: 'Course%i' % (x+1))

给出:

   UserID      Course  CourseNr
0       1     ENGLISH  Course1
1       1        MATH  Course2
2       2     ENGLISH  Course1
3       2  PHILOSOPHY  Course2
4       3        MATH  Course1

然后:

pd.pivot(df.UserID, df.CourseNr, df.Course)

结果:

CourseNr Course1      Course2
UserID                       
1         ENGLISH        MATH
2         ENGLISH  PHILOSOPHY
3            MATH         NaN