0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PandasのMultiIndexからスライスして行を取得する

Posted at

はじめに

この記事を見て、タイトルの動作ををしようとした時にハマったので、メモしておきます。
解決はしましたが、根本的なメカニズムを理解できていないので、詳しい方がいたらご教授ください。

やりたいこと

MultiIndexのDataFramedfから、Index2 == 'abc'のものだけ取得する。

Index1 Index2 Content
A abc A_abc
B de B_de
C abc C_abc
D de D_de
E abc E_abc
F de F_de

解決方法

df.loc[(slice(None), 'abc' ), :]

または

df.loc[pd.IndexSlice[:, 'abc'], :]

詳細はこちらの記事を参考にしてください。

できなかった方法

Pandasのloc[]では後ろの:を省略できるため、通常この2つは同じ動作をします。

df.loc['C']
df.loc['C', :]

ところが、今回:を省略したところエラーが発生。

df.loc[(slice(None), 'abc' )]  # KeyError: 'abc'
df.loc[pd.IndexSlice[:, 'abc']]  # KeyError: 'abc'

ちなみに、これは問題なく実行できました。

df.loc[(slice(None), 'abc' ), ]
df.loc[pd.IndexSlice[:, 'abc'], ]

エラーの理由がイマイチよく分かっていないので、知っている方がいれば教えていただけると助かります。

参考

0
0
1

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?