将列转换为数据帧的标题

时间:2014-11-12 18:29:08

标签: python pandas

我有这个df(除了下面显示的),它有一个名为GRP的列,其他列中有数据。我想要做的是让其他列按Grp的值拆分,将Grp值作为列标题。

原创DF

>>> xx
        x1              Grp
2    3.670     8ZD (S00K49)
3    3.659     8ZD (S00K49)
4    3.576     8ZD (S00K49)
5    3.509     8ZD (S00K49)
10   3.879  MPN 603 (Pos 1)
11   3.816  MPN 603 (Pos 1)
12   3.881  MPN 603 (Pos 1)
17   3.813  MPN 604 (Pos 1)
20   3.670     8ZD (S00K49)
21   3.612     8ZD (S00K49)
36   3.774  MPN 603 (Pos 1)
37   3.752  MPN 603 (Pos 1)
38   3.667  MPN 603 (Pos 1)
39   3.717  MPN 603 (Pos 1)
40   3.730  MPN 604 (Pos 1)
41   3.771  MPN 604 (Pos 1)
42   3.621  MPN 604 (Pos 1)

期望的结果:

>>> yy

     8ZD (S00K49)  MPN 603 (Pos 1) MPN 604 (Pos1) 
2    3.670         3.879           3.881    
3    3.659         3.816           3.813 
4    3.576         NaN             NaN 
5    3.509         NaN             NaN 

我无法在线或在文档中找到如何执行此操作。使用堆栈和unstack方法进行了一些实验,但从未得到我正在寻找的那种方式。任何提示很多appreaciated。

1 个答案:

答案 0 :(得分:1)

如果您按Grp分组,则可以添加"索引"这是每组中项目数的简单累积计数:

In [18]: df['index'] = df.groupby(['Grp']).cumcount()

In [19]: df
Out[19]: 
       x1              Grp  index
2   3.670     8ZD (S00K49)      0
3   3.659     8ZD (S00K49)      1
4   3.576     8ZD (S00K49)      2
5   3.509     8ZD (S00K49)      3
10  3.879  MPN 603 (Pos 1)      0
11  3.816  MPN 603 (Pos 1)      1
12  3.881  MPN 603 (Pos 1)      2
17  3.813  MPN 604 (Pos 1)      0
20  3.670     8ZD (S00K49)      4
21  3.612     8ZD (S00K49)      5
36  3.774  MPN 603 (Pos 1)      3
37  3.752  MPN 603 (Pos 1)      4
38  3.667  MPN 603 (Pos 1)      5
39  3.717  MPN 603 (Pos 1)      6
40  3.730  MPN 604 (Pos 1)      1
41  3.771  MPN 604 (Pos 1)      2
42  3.621  MPN 604 (Pos 1)      3

In [23]: result = df.pivot(index='index', 
                           columns='Grp', values='x1')

产量

In[24]: result
Out[24]:
Grp    8ZD (S00K49)  MPN 603 (Pos 1)  MPN 604 (Pos 1)
index                                                
0             3.670            3.879            3.813
1             3.659            3.816            3.730
2             3.576            3.881            3.771
3             3.509            3.774            3.621
4             3.670            3.752              NaN
5             3.612            3.667              NaN
6               NaN            3.717              NaN