2016-12-04 2 views
1

I가 나는 다음과 같은 설계 (멀티 index0로부터 하나의 dataframe로를 좀하고 싶습니다는 dataframes

  2006 2007 2008 2009 2010 2011 
Age                   
    0 1556 1623 5943 6133 6111 6345 
    1 5707 5838 0355 6049 2366 5828 
    2 5616 5770 5899 6080 6137 6303 
    3 5564 5593 8129 9388 1341 6215 
    4 5702 5598 7030 8576 9827 2007 

다음과 같은 유형의 세 가지 데이터 프레임 (A, B, C)

  A  B  C 
Year Age 
2006 0 1556 3532 23 
    1 5707 4352 53 
    2 5616 2533 67 
... 
2011 3 6215 4255 55 
    4 9827 3333 50 

어떤 제안?

건배, 마이크

답변

5

당신은을 사용할 수 있습니다 814,813,210 unstack과 : 다음

df1 = pd.DataFrame({ 
'2010': [6111, 2366, 6137, 1341, 9827], 
'2007': [1623, 5838, 5770, 5593, 5598], 
'2008': [5943, 355, 5899, 8129, 7030], 
'2011': [6345, 5828, 6303, 6215, 2007], 
'2006': [1556, 5707, 5616, 5564, 5702], 
'2009': [6133, 6049, 6080, 9388, 8576]}) 

print (df1) 
    2006 2007 2008 2009 2010 2011 
0 1556 1623 5943 6133 6111 6345 
1 5707 5838 355 6049 2366 5828 
2 5616 5770 5899 6080 6137 6303 
3 5564 5593 8129 9388 1341 6215 
4 5702 5598 7030 8576 9827 2007 

df2 = df1*2 
df3 = df1*3 
print (pd.concat([df1.unstack(),df2.unstack(),df3.unstack()], axis=1, keys=list('ABC')) 
     .rename_axis(('Year','Age'))) 

      A  B  C 
Year Age      
2006 0 1556 3112 4668 
    1 5707 11414 17121 
    2 5616 11232 16848 
    3 5564 11128 16692 
    4 5702 11404 17106 
2007 0 1623 3246 4869 
    1 5838 11676 17514 
    ... 

또는 stackconcat하지만, rename_axis에 의해 sort_index에 필요한 swaplevel, 마지막 이름 변경 수준 이름입니다 :

print (pd.concat([df1,df2,df3], axis=1, keys=list('ABC')) 
     .stack() 
     .swaplevel(0,1) 
     .sort_index() 
     .rename_axis(('Year','Age'))) 

      A  B  C 
Year Age      
2006 0 1556 3112 4668 
    1 5707 11414 17121 
    2 5616 11232 16848 
    3 5564 11128 16692 
    4 5702 11404 17106 
2007 0 1623 3246 4869 
    1 5838 11676 17514 
    2 5770 11540 17310 
    3 5593 11186 16779 
    4 5598 11196 16794 
2008 0 5943 11886 17829 
    1  355 710 1065 
    2 5899 11798 17697 
    ...