2014-03-06 2 views
3

pivot_table 메서드를 사용하여 만든 팬더 데이터 프레임이 있습니다. 다음과 같이 구성되어있다 :팬더 피벗 테이블의 열 순서 변경

import numpy as np 
import pandas 

datadict = { 
('Imps', '10day avg'): {'All': '17,617,872', 'Crossnet': np.nan, 'N/A': '17,617,872'}, 
('Imps', '30day avg'): {'All': '17,302,111', 'Crossnet': '110','N/A': '18,212,742'}, 
('Imps', '3day avg'): {'All': '8,029,438', 'Crossnet': '116', 'N/A': '8,430,904'}, 
('Imps', 'All'): {'All': '14,156,666', 'Crossnet': '113', 'N/A': '14,644,823'}, 
('Spend', '10day avg'): {'All': '$439', 'Crossnet': np.nan, 'N/A': '$439'}, 
('Spend', '30day avg'): {'All': '$468', 'Crossnet': '$0', 'N/A': '$492'}, 
('Spend', '3day avg'): {'All': '$209', 'Crossnet': '$0', 'N/A': '$219'}, 
('Spend', 'All'): {'All': '$368', 'Crossnet': '$0', 'N/A': '$381'} 
} 
df = pandas.DataFrame.from_dict(datadict) 
df.columns = pandas.MultiIndex.from_tuples(df.columns) 

나는 오류가 발생하지에도 불구하고 그러나 순서가 변경되지 않습니다, 아래의 방법을 모두 사용하여 새 위해서는 '임프' '를 보내'와 아래에 중첩 된 열을 다시 정렬을 시도 :

df['Spend']=df['Spend'].reindex_axis(['3day avg','10day avg','30day avg','All'],axis=1) 
df['Spend']=df['Spend'][['3day avg','10day avg','30day avg','All']] 

답변

3

한 가지 방법은 그하여 MultiIndex 및 재 인덱싱을 만드는 것입니다 :

In [11]: mi = pd.MultiIndex.from_product([['Imps', 'Spend'], ['3day avg','10day avg','30day avg','All']]) 

In [12]: df.reindex_axis(mi, 1) 
Out[12]: 
       Imps          Spend       
      3day avg 10day avg 30day avg   All 3day avg 10day avg 30day avg All 
All  8,029,438 17,617,872 17,302,111 14,156,666  $209  $439  $468 $368 
Crossnet  116   NaN   110   113  $0  NaN  $0 $0 
N/A  8,430,904 17,617,872 18,212,742 14,644,823  $219  $439  $492 $381 

참고 : MultiIndex.from_product y를하는 경우, 0.13의 새로운 그보다 더 오래된 판다를 사용하면 pd.MultiIndex.from_tuples(list(itertools.product(..)))을 사용합니다.

+0

나는 판다 (pandas) 0.11에 속해 있기 때문에 제 2의 해결책을 고수하고 있습니다. 새 버전에서도이 작업을 수행 할 수있는 기본 방법이없는 이유는 무엇입니까? – ChrisArmstrong

+0

@ChrisArmstrong 깔끔한 방법이있을 수 있습니다. 분명히있을 수있는 것처럼 보입니다. github에서 enh 요청을 게시 할 가치가 있습니다. –

+0

mi = pd.MultiIndex.from_tuples (list (itertools.product ([[Imps ','Spend '], ['3day avg ','10day 평균 ','30 일 평균 ','전체 ']]))). 다음 단계를 수행 할 때 오류가 발생하기 때문에 정확합니까? df.reindex_axis (mi, 1) – ChrisArmstrong