あなたは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
しかし、重複の場合、groupby
とapply
でpivot_table
または集約を必要とする参加:
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
EDIT:あなたは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'にキーエラーが発生します。また、複数のフィールドインデックスを作成することはできません。私はそれが私が求めたものではないことを知っています! –
ありがとう、もう一度。ピボットテーブル方式は、マルチフィールドインデックスも可能にします。ミックスに別の2つの列を組み込むことがどれほど難しいと思いますか?例えば、 'step_2'と' step_description_2'を追加した場合、ピボットテーブルに追加された別の3つのカラムが必要ですか?あるいは、それぞれのピボットを別々に行い、dfsに戻って一緒に参加する方が簡単でしょうか? –
時間をください。 – jezrael