可以使用2級的解決方案 - 使用pivot
或unstack
:
df1 = df.pivot(index='id', columns='step', values='step_description').add_prefix('step')
print (df1)
step step1 step2 step3
id
1 Start Continue Finish
df1 = df.set_index(['id', 'step'])['step_description'].unstack().add_prefix('step')
print (df1)
step step1 step2 step3
id
1 Start Continue Finish
但是,如果重複,需要pivot_table
或聚集體groupby
和apply
加盟:
print (df)
id step step_description
0 1 1 Start<-Same id=1, step=1
1 1 1 Start1<-Same id=1, step=1
2 1 2 Continue
3 1 3 Finish
df2=df.pivot_table(index='id',
columns='step',
values='step_description',
aggfunc=', '.join).add_prefix('step')
print (df2)
step step1 step2 step3
id
1 Start, Start1 Continue Finish
df2=df.groupby(['id', 'step'])['step_description'].apply(','.join)
.unstack().add_prefix('step')
print (df2)
step step1 step2 step3
id
1 Start,Start1 Continue Finish
編輯:
您需要2 DataFrame
秒,然後concat
他們:
cols = ['id','step','step_description','date']
df1 = df[cols].set_index(['id', 'step']).unstack().rename(columns={'step_description':'des'})
df1.columns = ['step{}_{}'.format(x[1], x[0]) for x in df1.columns]
print (df1)
step1_des step2_des step3_des step1_date step2_date step3_date
id
1 Start Continue Finish 8/6/2017 8/7/2017 8/7/2017
df2 = df.set_index(['id', 'stepA'])['stepA_description'].unstack().add_prefix('stepA')
print (df2)
stepA stepA1 stepA2 stepA3
id
1 Beginning Middle End
df = pd.concat([df1, df2], axis=1).reset_index()
print (df)
id step1_des step2_des step3_des step1_date step2_date step3_date \
0 1 Start Continue Finish 8/6/2017 8/7/2017 8/7/2017
stepA1 stepA2 stepA3
0 Beginning Middle End
謝謝!第一行完美工作 - 設置索引會導致'id'上的關鍵錯誤。此外,它不可能做一個多字段索引。我知道那不是我要求的! –
再次感謝你。數據透視表方法也允許使用多字段索引。你認爲將另外兩列加入混合有多困難?例如,如果我添加了「step_2」和「step_description_2」,需要將另外三列添加到數據透視表中?或者單獨做每個主鍵並將dfs連接在一起會更簡單? –
給我一些時間。 – jezrael