Python 在Pandas中展开并创建新列

Python 在Pandas中展开并创建新列,python,pandas,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 我想要下表: UserID Course 1 ENGLISH 1 MATH 2

我有下表:

UserID Course
1      ENGLISH
1      MATH  
2      ENGLISH
2      PHILOSOPHY
3      MATH
UserID Course1  Course2     Course3
1      ENGLISH  MATH 
2      ENGLISH  PHILOSOPHY
3      MATH  
我想要下表:

UserID Course
1      ENGLISH
1      MATH  
2      ENGLISH
2      PHILOSOPHY
3      MATH
UserID Course1  Course2     Course3
1      ENGLISH  MATH 
2      ENGLISH  PHILOSOPHY
3      MATH  
我该如何对待熊猫呢


请注意,我有成千上万的课程,所以为每门课程创建一个专栏是没有意义的

您可以添加包含“课程编号”(每个用户)的列,然后对其进行透视

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
然后:

结果:

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

您可以添加包含“课程编号”(每个用户)的列,然后对其进行透视

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
然后:

结果:

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

您尝试并在此处显示的方法将不起作用。如果无法为每门课程创建列,则可能需要
user\1:courses:[英语、数学]
。不过,这显然存在一个问题,即在不遍历列表的情况下,您无法检查用户是否注册了特定课程。@keyser我不想创建数组列,因为我想使我的表符合统计模型。sshashank:我还没有从概念上弄清楚应该怎么做。你在这里尝试和展示的方法是行不通的。如果你不能为每门课程创建一列,那么你可能需要
user\1:courses:[英语,数学]
。不过,这显然存在一个问题,即在不遍历列表的情况下,您无法检查用户是否注册了特定课程。@keyser我不想创建数组列,因为我想使我的表符合统计模型。沙沙克:我还没有从概念上想出我应该怎么做。