2014-11-12 3 views
0

다른 열에 데이터가있는 GRP라는 열이있는이 df (아래에 표시된 exceprt)가 있습니다. 내가 뭘하고 싶은 다른 열은 Grp 값을 열 머리글로 Gr9의 값으로 나눠야합니다.데이터 프레임의 표제로 열을 변환하십시오.

원래 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) 

원하는 결과 : I 온라인 또는 문서에서이 작업을 수행하는 방법을 찾을 수있었습니다

>>> 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) 메소드로 약간의 실험을 해보았지만, 내가 그런 식으로 찾고있는 것을 결코 얻지 못했습니다. 어떤 조언도 많이 제공되었습니다.

답변

1

당신이 Grp에 의해 GROUPBY 경우 각 그룹의 항목 수의 단순 누적 횟수 인 "인덱스"추가 할 수 있습니다

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 
+0

와우 - 감사합니다 I을 내가 그걸 알아 냈다고 생각하지 않아! –

관련 문제