2013-12-09 8 views

答えて

317

いずれか:

df['index1'] = df.index 

又は、.reset_index

df.reset_index(level=0, inplace=True) 

ので、あなたのようなインデックスの3つのレベルを持つマルチインデックス・フレーム、持っている場合:

>>> df 
         val 
tick  tag obs   
2016-02-26 C 2 0.0139 
2016-02-27 A 2 0.5577 
2016-02-28 C 6 0.0303 

をし、あなたにインデックスに第一(tick)及び第三(obs)のレベルを変換したいですカラムは、あなたがどうなる:

>>> df.reset_index(level=['tick', 'obs']) 
      tick obs  val 
tag       
C 2016-02-26 2 0.0139 
A 2016-02-27 2 0.5577 
C 2016-02-28 6 0.0303 
+4

あなたがしなければならないことを心に留めておきます – dval

+7

'df.reset_index(level = df.index.names、inplace = True) 'を指定すると、指定されたインデックスをすべてのインデックスに対してn回実行することができます(例えば、2つのインデックスがある場合は、全体のマルチインデックスを列に入れる – venti

+1

列にインデックスを付けることはできますかちょうどデータフレームに追加されたので、真の列とインデックスですか? – bretcj7

22

はマルチインデックスのためには、使用して、そのサブインデックスを抽出することができます

df['si_name'] = R.index.get_level_values('si_name') 

ここで、si_nameはサブインデックスの名前です。

3

もう少し明確にするために、インデックス内に2つのレベル(MultiIndex)を持つDataFrameを見てみましょう。

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
            ['North', 'South']], 
            names=['State', 'Direction']) 

df = pd.DataFrame(index=index, 
        data=np.random.randint(0, 10, (6,4)), 
        columns=list('abcd')) 

enter image description here

デフォルトパラメータで呼び出さreset_index方法は、列にすべてのインデックスレベルを変換し、新しいインデックスのような単純なRangeIndexを使用しています。

df.reset_index() 

enter image description here

レベルが列に変換されるインデックス制御するlevelパラメータを使用。可能であれば、より明示的なレベル名を使用してください。レベル名がない場合は、外部から0で始まる整数位置によって各レベルを参照できます。ここでスカラー値を使用することも、リセットするすべてのインデックスのリストを使用することもできます。あなたは、インデックスを維持し、次の操作を行うことができ、列にインデックスを有効にするまれなイベントで

df.reset_index(level='State') # same as df.reset_index(level=0) 

enter image description here

# for a single level 
df.assign(State=df.index.get_level_values('State')) 

# for all levels 
df.assign(**df.index.to_frame()) 
関連する問題