Pandas 複数の条件に合致した行を削除する

複数のカラムにまたがった条件を満たした行をデータフレームから除去する方法。パッと思いつかなかったのでメモしておく。

シンプルな方法

import pandas as pd
df = pd.DataFrame({'ID': [1, 2, 3, 3, 4, 5, 5],
                   'Name': ['Noto', 'Hisakawa', 'Kouda', 'Hayashibara', 'sakamoto', 'tamura', 'mitsuishi'],
                   'score':[100, 50, 80, 50, 100, 70, 55]})
df

	ID	Name	score
0	1	Noto	100
1	2	Hisakawa	50
2	3	Kouda	80
3	3	Hayashibara	50
4	4	sakamoto	100
5	5	tamura	70
6	5	mitsuishi	55

ひと手間かかるが、複数条件に合致する行のインデックスを定義してdrop関数に渡す。

まずは条件を作って、インデックスを取得する。複数条件はandの場合は&を使って条件を追加していく。orなら|。

target = df.index[(df['ID'] > 3) & (df['score'] > 60)]
target

Int64Index([4, 5], dtype='int64')

あとはdrop関数を使ってデータフレームから対象データを除去する。

df.drop(target)

	ID	Name	score
0	1	Noto	100
1	2	Hisakawa	50
2	3	Kouda	80
3	3	Hayashibara	50
6	5	mitsuishi	55

対象が除去された。この際、インデックスも除去されている(飛び飛びになっている)ので必要があればインデックスを振り直す。

queryメソッドを使用した場合

対象になる列のインデックスを取得する際に、queryメソッドを使ってシンプルに抽出することができた。いちいちdf[‘column’]と記述しないでいいので読みやすく分かりやすい。https://note.nkmk.me/python-pandas-query/

df.query('ID > 3 & score > 60').index

Int64Index([4, 5], dtype='int64')

今後はこちらを使うことにする。

参考文献

このサイトの主
投稿を作成しました 98

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る