1
3

More than 3 years have passed since last update.

PandasでMultiindex

Last updated at Posted at 2020-05-08

参考URL : https://jakevdp.github.io/PythonDataScienceHandbook/03.05-hierarchical-indexing.html

データフレーム作成

# hierarchical indices and columns
index = pd.MultiIndex.from_product([[2013, 2014], [1, 2]],
                                   names=['year', 'visit'])
columns = pd.MultiIndex.from_product([['Bob', 'Guido', 'Sue'], ['HR', 'Temp']],
                                     names=['subject', 'type'])

# mock some data
data = np.round(np.random.randn(4, 6), 1)
data[:, ::2] *= 10
data += 37

# create the DataFrame
health_data = pd.DataFrame(data, index=index, columns=columns)
health_data

image.png

列のHRのみにアクセス。idxを使わない方法もあるけど、使う方法を覚えといた方が良いかもしれない。

idx = pd.IndexSlice
health_data.loc[idx[:,:],idx[:,'HR']]

image.png

行のvisit=1のみにアクセス

idx = pd.IndexSlice
health_data.loc[idx[:,1],idx[:,:]]

image.png

Guido列とSue列にアクセス

health_data[['Guido','Sue']]

image.png

BobのHRにアクセス

health_data.loc[:,('Bob','HR')]

image.png

既存のデータフレームにindexを追加する場合は、以下のように再定義する。

idx = pd.MultiIndex.from_arrays([df['group'],df['name']])
df.index = idx

index名にアクセス

> health_data.index.get_level_values(1)
Int64Index([1, 2, 1, 2], dtype='int64', name='visit')

条件を指定して抽出。※~health_data.index.get_level_values(1).isin(リスト)でも良い。これは複数条件指定出来る。

idx = health_data.index.get_level_values(1)!=1
health_data.loc[idx,]

image.png

条件抽出 複数指定

条件を複数指定出来る。HR列を抽出

idx = pd.IndexSlice
cnd = health_data.columns.get_level_values(1).isin(['HR'])
health_data.loc[idx[:,:],idx[:,cnd]]
subject Bob Guido Sue
type HR HR HR
year visit
2013 1 37.0 30.0 26.0
2 38.0 39.0 43.0
2014 1 26.0 33.0 22.0
2 34.0 39.0 26.0

HR列「以外」を抽出

idx = pd.IndexSlice
cnd = ~health_data.columns.get_level_values(1).isin(['HR'])
health_data.loc[idx[:,:],idx[:,cnd]]
subject Bob Guido Sue
type Temp Temp Temp
year visit
2013 1 35.9 36.2 37.8
2 37.0 37.1 38.5
2014 1 38.5 37.3 36.8
2 37.1 37.2 37.1
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3