2016-09-12 9 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) 

を呼び出すとき、私は、まったく同じデータフレームを取得します。私は、次の

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

関連する問題