如何使用转置转换熊猫数据框列?

时间:2018-06-27 08:47:02

标签: python pandas numpy dataframe transpose

我有一个像这样的数据框:

      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

第一个数据帧中会有更多值。

1 个答案:

答案 0 :(得分:2)

首先通过向前填充来替换列A-F中的缺失值,然后用set_indexunstack进行整形:

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