2016-09-12 4 views
1

2 레벨 다중 색인 팬더 데이터 프레임을 다시 색인하려고합니다. 데이터 구조체는 다음과 같습니다팬더 데이터 프레임에서 다중 색인을 다시 색인화합니다.

In [1]: df.head(5) 


Out [1]:        arrivals departs 
station   datetime 
S1    2014-03-03 07:45:00  1   1 
       2014-03-03 09:00:00  2   1 
       2014-03-03 11:45:00  1   1 
       2014-03-04 08:45:00  1   1 
       2014-03-04 09:45:00  2   1 

내가 15 분 간격으로 datetime 격차를 채우기 위해 싶지만

In [2]: df.reindex(pd.date_range(start='2014-03-03 07:45:00', 
        end='2014-03-04 07:45:00', freq='15min'), level=1) 

를 호출 할 때 나는 똑같은 dataframe를 얻을. 다음과 같은 것을 기대했습니다

Out [2]:        arrivals departs 
station   datetime 
S1    2014-03-03 07:45:00  1   1 <-- original row 
       2014-03-03 08:00:00  0   0 <-- filled in row 
       2014-03-03 08:15:00  0   0 <-- filled in 
       2014-03-03 08:30:00  0   0 <-- filled in 
       2014-03-03 08:45:00  0   0 <-- filled in 
       2014-03-03 09:00:00  2   1 <-- original 
       etc... 

아이디어가 있으십니까?

답변

2
간단한 datetimeindex로 다시 켜고 격차를 채우기

: 인덱스에 중복 된 값에 문제가있는 것 같습니다

df = (df.unstack(level=0) 
     .reindex(pd.date_range(start='2014-03-03 07:45:00', 
        end='2014-03-04 07:45:00', freq='15min'))) 


df = df.fillna(0) # for the data, 0 is the desired value 

df.stack('station').swaplevel(0,1).sort_index() 
+0

. 인덱스에서'station'을 제거하면 datetime에 대해 중복 된 값을 얻게됩니다. 다시 인덱스 할 때'ValueError : 중복 축에서 다시 색인을 생성 할 수 없습니다 '라는 메시지가 나타납니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? – misterte

+0

맞음, 대신 스택 사용에 대한 대답을 변경했습니다. – Boud

+0

네, 맞습니다. swaplevel() 대신에'swaplevel (0,1)'을 사용해야 만했다. 감사! – misterte

관련 문제