Сначала замените пропущенные значения в столбцах A-F
заполнением вперед, а затем измените форму на set_index
на unstack
:
cols = list('ABCDEF')
df[cols] = df[cols].ffill()
df = df.set_index(cols + ['G'])['H'].unstack().reset_index().rename_axis(None, 1)
print (df)
A B C D E F 1 3 d f g k r s x
0 as t r a 2 ds NaN NaN NaN NaN NaN s4 NaN NaN NaN
1 ds a s d f ds gf s3 43 64 NaN NaN NaN se NaN
2 xx s 1 d f df NaN NaN NaN 54 g4 NaN 43 NaN r4
Если порядок важен, добавьте reindex
к unique
значения:
s = df['G'].unique()
df = df.set_index(cols + ['G'])['H'].unstack().reindex(columns=s).reset_index().rename_axis(None, 1)
print (df)
A B C D E F f g x r d s 1 3 k
0 as t r a 2 ds NaN NaN NaN NaN NaN NaN NaN NaN s4
1 ds a s d f ds 64 NaN NaN NaN 43 se gf s3 NaN
2 xx s 1 d f df 54 g4 r4 43 NaN NaN NaN NaN NaN