首页 > 解决方案 > Pandas:行值作为列

问题描述

我有一个看起来像这样的 DataFrame

   CourseID                                        StudentID
0       100                                  (Student:1)=001
1       102                  (Student:1)=007;(Student:2)=006
2       103                                              NaN
3       106                                  (Student:1)=007
4       107                                              NaN
5       108  (Student:1)=005;(Student:2)=031;(Student:3)=011

我想按如下方式构造 DataFrame:

   CourseID      Student_1 Student_2 Student_3 
0       100            001     NaN         NaN       
1       102            007     006         NaN
2       103            NaN     NaN         NaN               
3       106            007     NaN         NaN        
4       107            NaN     NaN         NaN
5       108            005     031         011

关于将 DataFrame 转换为所需输出的最佳方法的任何建议?

标签: pythonpandas

解决方案


让我们试试str.get_dummies,然后修改输出并join返回

s=df.StudentID.str.get_dummies(';')
s=s.T.mul(pd.Series(s.columns.str.split('=').str[1],index=s.columns),axis=0).T
s.columns=s.columns.str.split('=').str[0].str.replace(':','_')
df=df.join(s)

推荐阅读