読者です 読者をやめる 読者になる 読者になる

<Python, pandas> カラムをインデックスに引き当てる

データフレームDataFrameのカラムColumnをインデックスindexに引き当てる。
set_index()を使うらしい。

In [37]: df = pd.DataFrame({
    ...: 'a':[1,2,3,4,5], 
    ...: 'b':[0,0,1,1,1],
    ...: 'c':['a','b','c','c','d'],
    ...: 'd':['e','f','g','h','i']
    ...: })

In [38]: df
Out[38]: 
   a  b  c  d
0  1  0  a  e
1  2  0  b  f
2  3  1  c  g
3  4  1  c  h
4  5  1  d  i

In [39]: df.set_index('a')
Out[39]: 
   b  c  d
a         
1  0  a  e
2  0  b  f
3  1  c  g
4  1  c  h
5  1  d  i

In [40]: df
Out[40]: 
   a  b  c  d
0  1  0  a  e
1  2  0  b  f
2  3  1  c  g
3  4  1  c  h
4  5  1  d  i

In [41]: df1 = df.set_index(['b','c'])

In [42]: df1
Out[42]: 
     a  d
b c      
0 a  1  e
  b  2  f
1 c  3  g
  c  4  h
  d  5  i

In [43]: df1.ix[(1,'c')]
Out[43]: 
     a  d
b c      
1 c  3  g
  c  4  h

In [44]: df1.ix[(0,'a')]
Out[44]: 
     a  d
b c      
0 a  1  e

In [45]: df1.ix[(1,'c'),'a']
Out[45]: 
b  c
1  c    3
   c    4
Name: a, dtype: int64
  • リストlist複数カラムを渡せばマルチインデックスmulti indexとなる。
  • set_index()は新たにデータフレームを返す。対象のデータフレームを変更しない。
  • .ixで参照できる。 各インデックスは階層ごとに ()内に並べて渡す。

マニュアル。

pandas.DataFrame.set_index — pandas 0.17.1 documentation

MultiIndex / Advanced Indexing — pandas 0.17.1 documentation