2 回答

TA贡献1804条经验 获得超3个赞
使用groupby apply+list和apply+pd.Series作为:
df1 = df.groupby('class_id')['instructor_id'].apply(list).apply(pd.Series)
# alternative df.groupby('class_id')['instructor_id'].apply(lambda x: pd.Series(x.tolist())).unstack()
df1.columns = ['instructor_id']+['instructor_id_'+str(i+1) for i in df1.columns[1:]]
df1.reset_index(inplace=True)
print(df1)
class_id instructor_id instructor_id_2 instructor_id_3
0 1 10.0 NaN NaN
1 2 10.0 20.0 NaN
2 3 30.0 40.0 50.0

TA贡献1799条经验 获得超6个赞
groupby+ cumcount+unstack
这是使用key助手系列的一种方法:
key = df.groupby('class_id')['instructor_id'].cumcount()\
.add(1).map('Instructor_{}'.format)
res = df.set_index(['class_id', key]).unstack().reset_index()
# clean up column names
res.columns = res.columns.droplevel(0)
res = res.rename(columns={'': 'class_id'})
print(res)
class_id Instructor_1 Instructor_2 Instructor_3
0 1 10.0 NaN NaN
1 2 10.0 20.0 NaN
2 3 30.0 40.0 50.0
添加回答
举报