pandas.DataFrameを使ってアルゴリズムを実装する中で、DataFrameをMECEに分割できていないためにバグることが多々あります。
普通のif~else
分岐であれば条件はほぼMECEになりますが、DataFrameの分割になると忘れがちな気がしています。(自分だけ?)
そんなとき、DataFrameでも~
を使ってelse
条件を書くことで、MECE分割されないことによるエラーを防ぐことができます。
サンプルとしてKaggleのtitanicデータを使用します。
https://www.kaggle.com/c/titanic/data
import pandas as pd
# データセットの読み込み
train = pd.read_csv('../input/train.csv')
# 男性かつ20歳以上でDataFrameを分割
train_subset01 = train[
(train['Sex'] == 'male')
& (train['Age'] >= 20)
]
# not(男性かつ20歳以上)でDataFrameを分割
train_subset02 = train[
~((train['Sex'] == 'male')
& (train['Age'] >= 20))
]
# 分割結果がMECEであることを確認
print(f'total size is :{str(len(train))}')
print(f'subset01 size is :{str(len(train_subset01))}')
print(f'train_subset02 size is :{str(len(train_subset02))}')
print(f'intersection size is :{str(len(set(train_subset01.PassengerId).intersection(set(train_subset02.PassengerId))))}')
total size is :891
subset01 size is :364
train_subset02 size is :527
intersection size is :0
冗長な表現になりますが、~
を使うことでif~else
を実現できるので、DataFrame分割でミスるリスクを減らせると思います。