LoginSignup
1
0

More than 3 years have passed since last update.

pandas.DataFrameのMECEな分割で気をつけること

Posted at

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分割でミスるリスクを減らせると思います。

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