一般社団法人 全国個人事業主支援協会

COLUMN コラム

Slice

公式ドキュメント

 

https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html#using-slicers

 

セットアップ

 

miindex = pd.MultiIndex.from_product(
[mklbl("A", 4), mklbl("B", 2), mklbl("C", 4), mklbl("D", 2)]
)
micolumns = pd.MultiIndex.from_tuples(
[("a", "foo"), ("a", "bar"), ("b", "foo"), ("b", "bah")], names=["lvl0", "lvl1"]
)
dfmi = (
pd.DataFrame(
np.arange(len(miindex) * len(micolumns)).reshape(
(len(miindex), len(micolumns))
),
index=miindex,
columns=micolumns,
)
.sort_index()
.sort_index(axis=1)
)

 

 

sliceオブジェクトを使用して、MultiIndexからslice

 

dfmi.loc[(slice("A1", "A3"), slice(None), ["C1", "C3"]), :]

 

Pandas IndexSliceオブジェクトを利用すると、通常のIndexのようにコロンをベースとした表記を利用可能

 

idx = pd.IndexSlice
dfmi.loc[idx[:, :, ["C1", "C3"]], idx[:, "foo"]]

 

条件式のインデックスを用いて取得する方法

 

mask = dfmi[("a", "foo")] > 200
dfmi.loc[idx[mask, :, ["C1", "C3"]], idx[:, "foo"]]

 

.locにaxisを指定することで、対象の軸に対してのみSliceを実行できる

 

dfmi.loc(axis=0)[:, :, ["C1", "C3"]]
The following two tabs change content below.

WATANABE REN

千葉県在住のエンジニアです。最近はPythonやってます。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア