Pandas使用列标题作为值将多个列转换/合并为单个列

时间:2018-03-01 09:15:36

标签: python pandas dataframe merge pivot

我希望将三列组合成一个数据框中的单个列,使用列标题作为新列的值。所有三列的唯一值都为'1',其他两列只有NaN。

最初我想使用pivot,但我怀疑合并操作会更容易吗?我只是不确定该怎么做。

即。我需要转

index     A       B        C        time      id
    0     1       NaN      NaN      4.42      1
    1     1       NaN      NaN      4.48      3
    2     1       NaN      NaN      5.45      2
    3     NaN     1        NaN      6.64      2
    4     NaN     1        NaN      7.49      1
    5     NaN     1        NaN      7.72      3
    6     NaN     NaN      1        8.13      1
    7     NaN     NaN      1        8.65      2
    8     NaN     NaN      1        9.07      3

...成

index     type  time    id
    0     A     4.42    1
    1     A     4.48    3
    2     A     5.45    2
    3     B     6.64    2
    4     B     7.49    1
    5     B     7.72    3
    6     C     8.13    1
    7     C     8.65    2
    8     C     9.07    3

1 个答案:

答案 0 :(得分:2)

使用:

df = (df.set_index(['time','id'])
       .stack()
       .reorder_levels([2,0,1])
       .reset_index(name='a')
       .drop('a', 1)
       .rename(columns={'level_0':'type'}))
print (df)
  type  time  id
0    A  4.42   1
1    A  4.48   3
2    A  5.45   2
3    B  6.64   2
4    B  7.49   1
5    B  7.72   3
6    C  8.13   1
7    C  8.65   2
8    C  9.07   3