2016-08-26 16 views
0

データフレームのマルチインデックスに追加し、新しいインデックスカラムの並べ替え順序で再スタックする方法を教えてください。データフレームのマルチインデックスに追加し、パンダで再スタック

私は次のように図書館で本を表し、マルチインデックス['section_id','last_checkout']とのデータフレームを持っている:

           book_id author_id 
section_id last_checkout 
4    2016-04-04 07:01:59.223   1   10 
       2016-04-04 07:01:59.223   2   11 
       2016-04-04 07:01:59.223   3   12 
       2016-04-04 07:01:59.233   4   13 
       2016-04-04 07:01:59.247   5   13 
       2016-04-04 07:01:59.253   6   14 
5    2016-04-04 07:01:59.253   10   15 
       2016-04-04 07:01:59.268   11   10 

そう冊6から1はセクション4です。 Iインデックスに別の列、pd.Series({'floor': [1,1,2,1,2,3,4,1]})を追加する予定:この後

            book_id author_id 
section_id floor last_checkout 
4   1  2016-04-04 07:01:59.223   1   10 
      1  2016-04-04 07:01:59.223   2   11 
      2  2016-04-04 07:01:59.223   3   12 
      1  2016-04-04 07:01:59.233   4   13 
      2  2016-04-04 07:01:59.247   5   13 
      3  2016-04-04 07:01:59.253   6   14 
5   4  2016-04-04 07:01:59.253   10   15 
      1  2016-04-04 07:01:59.268   11   10 

、私はすでに存在して順序を維持しながら、フロア別の行でスタックしたい:

            book_id author_id 
section_id floor last_checkout 
4   1  2016-04-04 07:01:59.223   1   10 
      1  2016-04-04 07:01:59.223   2   11 
      1  2016-04-04 07:01:59.233   4   13 
5   1  2016-04-04 07:01:59.268   11   10 
4   2  2016-04-04 07:01:59.223   3   12 
      2  2016-04-04 07:01:59.247   5   13 
      3  2016-04-04 07:01:59.253   6   14 
5   4  2016-04-04 07:01:59.253   10   15 

私はそれがあるべきと思いましたかなりシンプルだが、API、私は失敗したこれらの様々な順列を試した後、非直観的と思われる:ここで

# Cannot append equal length series to multi-index 
#1: df.index = df.index.append(series) 

# Underlying mergesort does not 'stack' the groups in original ordering 
#2: df['floor'] = series 
#3: df.sort_values('floor', ascending=True) 
#4: df.sort_values(['floor', 'last_checkout'], ascending=[True,True]) 

答えて

0

はあなたのためのソリューションです。

まず、あなたのシリーズを定義する方法は、あまり正統的ではありません。シリーズを以下のように定義することをお勧めします。

test = pd.Series([1,1,2,1,2,3,4,1],name='floor') 

次に、マルチインデックスデータフレームを取得し、インデックスをリセットします。 「追加」する/縦に列を積み重ねるには、「追加」の代わりに「結合」を使用します。これはコードの外観です。

df = df.reset_index() 
floor_series = pd.Series([1,1,2,1,2,3,4,1],name='floor') 
df = df.join(test) 
df = df.sort('floor') 
df = df.set_index(['floor','section_id']) 
関連する問題