2016-12-19 1 views
1
I이 dataframe 변환하고자

:Dataframe 복잡한 reformating

import pandas as pd 
df = pd.DataFrame.from_items([('a', [13,'F','RD',0,0,1,0,1]), 
           ('b', [45,'M','RD',1,1,0,1,0]), 
           ('c', [67,'F','AN',0,0,1,0,1]), 
           ('d', [23,'M','AN',1,0,0,1,1])], 
          orient='index', columns=['AGE', 'SEX', 'REG', 'A', 'B', 'C', 'D', 'E']) 
print df 

    AGE SEX REG A B C D E 
a 13 F RD 0 0 1 0 1 
b 45 M RD 1 1 0 1 0 
c 67 F AN 0 0 1 0 1 
d 23 M AN 1 0 0 1 1 

내로 변형 예정 : 그래서 기본적 반복

AGE SEX REG PRODUCT PA 
a 13 F RD A 0 
a 13 F RD B 0 
a 13 F RD C 1 
a 13 F RD D 0 
a 13 F RD E 1 
b 45 M RD A 1 
b 45 M RD B 1 
b 45 M RD C 0 
b 45 M RD D 1 
b 45 M RD E 0 
c 67 F AN A 0 
c 67 F AN B 0 
c 67 F AN C 1 
c 67 F AN D 0 
c 67 F AN E 1 
d 23 M AN A 1 
d 23 M AN B 0 
d 23 M AN C 0 
d 23 M AN D 1 
d 23 M AN E 1 

을 각 제품 (A, B, C, D, E) 각 사용자 (a, b, c, d)에 대해 할당하고 각 사용자/제품에 대한 값을 지정합니다. 원본 테이블에는 수천 개의 행이 있습니다.

답변

0

당신은 PRODUCTstack, reset_index 마지막 rename 열 이름으로 set_index를 사용할 수 있습니다

print (df.set_index(['AGE','SEX','REG']) 
     .stack() 
     .reset_index(name='PA') 
     .rename(columns={'level_3':'PRODUCT'})) 

    AGE SEX REG PRODUCT PA 
0 13 F RD  A 0 
1 13 F RD  B 0 
2 13 F RD  C 1 
3 13 F RD  D 0 
4 13 F RD  E 1 
5 45 M RD  A 1 
6 45 M RD  B 1 
7 45 M RD  C 0 
8 45 M RD  D 1 
9 45 M RD  E 0 
10 67 F AN  A 0 
11 67 F AN  B 0 
12 67 F AN  C 1 
13 67 F AN  D 0 
14 67 F AN  E 1 
15 23 M AN  A 1 
16 23 M AN  B 0 
17 23 M AN  C 0 
18 23 M AN  D 1 
19 23 M AN  E 1 

print (df.set_index(['AGE','SEX','REG'], append=True) 
     .stack() 
     .reset_index([1,2,3,4], name='PA') 
     .rename(columns={'level_4':'PRODUCT'})) 
    AGE SEX REG PRODUCT PA 
a 13 F RD  A 0 
a 13 F RD  B 0 
a 13 F RD  C 1 
a 13 F RD  D 0 
a 13 F RD  E 1 
b 45 M RD  A 1 
b 45 M RD  B 1 
b 45 M RD  C 0 
b 45 M RD  D 1 
b 45 M RD  E 0 
c 67 F AN  A 0 
c 67 F AN  B 0 
c 67 F AN  C 1 
c 67 F AN  D 0 
c 67 F AN  E 1 
d 23 M AN  A 1 
d 23 M AN  B 0 
d 23 M AN  C 0 
d 23 M AN  D 1 
d 23 M AN  E 1 
+0

내가 시작시 사용자 (A, B, C, D) 계속해야 각 줄의. – manz

+0

'PRODUCT' 열을 생각하십니까? 수정 된 답변을 확인하십시오. – jezrael

+0

첫 번째 버전은 좋았습니다. 데이터로 처리하는 방법을 찾았습니다. ;) – manz