2013-08-15 21 views
11

単一レベルの列を持つ既存のデータフレームを階層 のインデックス 列(MultiIndex)に変換するにはどうすればよいですか?データフレーム列をMultiIndexに変換する

例のデータフレーム:)私はデータフレームを(使用している場合

In [2]: 
df.reindex(columns=[['odd','even','odd'],df.columns]) 
Out [2]: 
    odd even odd 
    one two three 
A NaN NaN NaN 
B NaN NaN NaN 

同じ:私はREINDEXは()働くだろうと思っていると思いますが、私がNaNのを取得

In [1]: 
import pandas as pd 
from pandas import Series, DataFrame 

df = DataFrame(np.arange(6).reshape((2,3)), 
       index=['A','B'], 
       columns=['one','two','three']) 
df 
Out [1]: 
    one two three 
A 0 1  2 
B 3 4  5 

In [3]: 
DataFrame(df,columns=[['odd','even','odd'],df.columns]) 
Out [3]: 
    odd even odd 
    one two three 
A NaN NaN NaN 
B NaN NaN NaN 

df.valuesを指定すると、この最後のアプローチは実際に機能します。

In [4]: 
DataFrame(df.values,index=df.index,columns=[['odd','even','odd'],df.columns]) 
Out [4]: 
    odd even odd 
    one two three 
A 0  1  2 
B 3  4  5 

これを行う適切な方法は何ですか? reindex()がNaNを与えるのはなぜですか?

答えて

14

あなただけの再インデックスが新しい(同じサイズ)インデックスのような(そのリストのリストは、マルチインデックスに変換する場合)

In [8]: df 
Out[8]: 
    one two three 
A 0 1  2 
B 3 4  5 

In [10]: df.columns = [['odd','even','odd'],df.columns] 

In [11]: df 
Out[11]: 
    odd even odd 
    one two three 
A 0  1  2 
B 3  4  5 

に直接列を設定します、接近していました既存のインデックスの並べ替え/フィルタリング。あなたがすべてのナンを得る理由は、この新しいインデックスと一致する既存の列を見つけることですね。一致しないので、それはあなたが得るものです

関連する問題