대안

2017-01-24 1 views
1

가 내가 뒤로 한주기에 의해 기간을 이동하고자하는 형태대안

groupid  period  
     1 2011-02  5 
     1 2011-03  6 
     1 2011-04  7 
     1 2011-05  8 

의 시리즈를 set_level_values합니다. 나는

df.index.get_level_values('period').shift(-1) 

를 사용하여 새 인덱스를 생성 할 수 있습니다하지만 그때 나는 다시 그들을 강제하는 방법을 모르겠어요. set_level_values()가 존재하지 않습니다. MultiIndex의 두 번째 레벨을 덮어 쓰려면 어떻게합니까?

답변

0

당신은 MultiIndex.set_levels 사용할 수 있습니다

print (df.index) 
MultiIndex(levels=[[1], [2011-02, 2011-03, 2011-04, 2011-05]], 
      labels=[[0, 0, 0, 0], [0, 1, 2, 3]], 
      names=['groupid', 'period']) 

print (df.index.get_level_values('period').shift(-1)) 
PeriodIndex(['2011-01', '2011-02', '2011-03', '2011-04'], 
      dtype='period[M]', name='period', freq='M') 

df.index.set_levels([df.index.get_level_values('groupid'), 
        df.index.get_level_values('period').shift(-1)], inplace=True) 
print (df) 
groupid period 
1  2011-01 5 
     2011-02 6 
     2011-03 7 
     2011-04 8 
Name: val, dtype: int64