我有一个像这样的数据框:
A B C D E F G H
--------------------------
0 xx s 1 d f df f 54
1 g g4
2 x r4
3 r 43
4 ds a s d f ds f 64
5 d 43
6 s se
7 1 gf
8 3 s3
9 as t r a 2 ds k s4
如何以这种格式制作它:
A B C D E F f g x r d s 1 3 k
---------------------------------------------------------
0 xx s 1 d f df 54 g4 r4 43
1 ds a s d f ds 64 43 se gf s3
2 as t r a 2 ds s4
第一个数据帧中会有更多值。
答案 0 :(得分:2)
首先通过向前填充来替换列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
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