2017-05-22 2 views
1

다중 색인 데이터 프레임의보기를 만들려고합니다. 열이 제거 된 후에도 열 이름이 왜 남아 있는지 궁금합니다.Python Pandas : 다중 인덱싱 된 데이터 프레임에서 열을 삭제합니다. 열은 제거되었지만 열 이름은 그대로 유지됩니다.

import panda as pd 

df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8], 
    'x': [2, 2, 2, 2, 12, 12, 12, 12], 
    'y': [5.91, 4.43, 5.22, 1.31, 6.32, 6.78, 4.65, 1.98], 
    'z': [18.61, 17.60, 18.27, 16.18, 16.81, 16.37, 67.07, 46.00]}) 

pivot_df = df.pivot_table(index=['id'],columns=['x'],values=['y','z']) 

[output] 
>>> pivot_df 
     y   z  
x  2  12  2  12 
id       
1 5.91 NaN 18.61 NaN 
2 4.43 NaN 17.60 NaN 
3 5.22 NaN 18.27 NaN 
4 1.31 NaN 16.18 NaN 
5 NaN 6.32 NaN 16.81 
6 NaN 6.78 NaN 16.37 
7 NaN 4.65 NaN 67.07 
8 NaN 1.98 NaN 46.00 

>>> pivot_df.columns 
MultiIndex(levels=[['y', 'z'], [2, 12]], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=[None, 'x']) 

위의 코드에서 예상되는 레벨 0에서 [ 'y', 'z']를 볼 수 있습니다. 이제 'z'아래의 열을 없애려고합니다.

new_pivot_df = pivot_df.drop('z',axis=1,level=0) 

[output] 
>>> new_pivot_df 
     y  
x  2  12 
id    
1 5.91 NaN 
2 4.43 NaN 
3 5.22 NaN 
4 1.31 NaN 
5 NaN 6.32 
6 NaN 6.78 
7 NaN 4.65 
8 NaN 1.98 

>>> new_pivot_df.columns 
MultiIndex(levels=[['y', 'z'], [2, 12]], 
      labels=[[0, 0], [0, 1]], 
      names=[None, 'x']) 

위의 코드에서 new_pivot_df는 'z'가 삭제되었음을 나타냅니다. 그러나 new_pivot_df.columns를 검사 할 때 여전히 열 이름에 'z'가 표시됩니다. 왜 그런지 이해하고 싶습니다. 다중 인덱싱 된 데이터 프레임에서 열 (데이터 및 이름)을 제거하라는 멋진 제안을 찾고 있습니다.

미리 감사드립니다.

+0

([인덱스 값을 제거하지 않습니다 Dataframe 슬라이스]의 가능한 중복 https://stackoverflow.com/questions/ 32585009/dataframe-slice-does-not-remove-index-values) – root

답변

4

새로운 버전 0.20.1 remove_unused_levels()에서 :

new_pivot_df.columns = new_pivot_df.columns.remove_unused_levels() 
new_pivot_df.columns 

출력 :

MultiIndex(levels=[['y'], [2, 12]], 
      labels=[[0, 0], [0, 1]], 
      names=[None, 'x']) 
관련 문제