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我不想创建数组列,因为我想使我的表符合统计模型。沙沙克:我还没有从概念上想出我应该怎么做。