2016-08-23 5 views
2

피벗 테이블로 만든 DataFrame이 있습니다. 그러나 이제는 특정 열을 기반으로하는 공통 값이 서로 나란히 정렬되도록 피벗 테이블을 정렬하려고합니다. 예 : 주문 DataFrame 일반적인 모든 국가가 동일한 행에 정렬되도록 :팬 데이터 프레임 피벗 테이블 및 그룹화

data = {'dt': ['2016-08-22', '2016-08-21', '2016-08-22', '2016-08-21', '2016-08-21'], 
     'country':['uk', 'usa', 'fr','fr','uk'], 
     'number': [10, 21, 20, 10,12] 
     } 

df = pd.DataFrame(data) 
print df 

    country   dt number 
0  uk 2016-08-22  10 
1  usa 2016-08-21  21 
2  fr 2016-08-22  20 
3  fr 2016-08-21  10 
4  uk 2016-08-21  12 


#pivot table by dt: 

df['idx'] = df.groupby('dt')['dt'].cumcount() 
df_pivot = df.set_index(['idx','dt']).stack().unstack([1,2]) 
print df_pivot 
dt  2016-08-22  2016-08-21  
     country number country number 
idx          
0   uk  10  usa  21 
1   fr  20   fr  10 
2   NaN NaN   uk  12 


#what I really want: 

     dt 2016-08-22 2016-08-21  
     country number country number 

0   uk  10   uk  12 
1   fr  20   fr  10 
2   NaN NaN  usa  21 

또는 더 나은 : 모두 2016-08-222016-08-21에서

   2016-08-22 2016-08-21  
     country number  number 

0   uk  10   12 
1   fr  20   10 
2   usa NaN   21 

uk 값이 같은 행에 정렬

답변

1

당신은 사용할 수 있습니다 :

df_pivot = df.set_index(['dt','country']).stack().unstack([0,2]).reset_index() 
print (df_pivot) 
dt country 2016-08-22 2016-08-21 
       number  number 
0  fr  20.0  10.0 
1  uk  10.0  12.0 
2  usa  NaN  21.0 

#change first value of Multiindex from first to second level 
cols = [col for col in df_pivot.columns] 
df_pivot.columns = pd.MultiIndex.from_tuples([('','country')] + cols[1:]) 
print (df_pivot) 
      2016-08-22 2016-08-21 
    country  number  number 
0  fr  20.0  10.0 
1  uk  10.0  12.0 
2  usa  NaN  21.0 

another 더 간단한 솔루션은 pivot과 같습니다 :

df_pivot = df.pivot(index='country', columns='dt', values='number') 
print (df_pivot) 
dt  2016-08-21 2016-08-22 
country       
fr    10.0  20.0 
uk    12.0  10.0 
usa   21.0   NaN 
+0

감사합니다. – jezrael