Pandasは、データ操作と分析のための強力なPythonライブラリです。一般的なタスクには、特定の列に適用された条件に基づいてDataFrameから行を選択することが含まれます。この記事では、特定の条件を満たす行のインデックスを取得するための3つの効率的な方法について説明します。
目次
ブールインデックス:シンプルで効率的なアプローチ
ブールインデックスは、単純な選択条件に対して簡潔で効率的なソリューションを提供します。条件の真偽値を直接活用して行をフィルタリングします。
例を挙げて説明します。
import pandas as pd
data = {'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
print(df)
# 'col1'が2より大きい行のインデックスを取得
indices = df[df['col1'] > 2].index.tolist()
print(indices) # 出力: [2, 3, 4]
このコードはまずブールマスク(df['col1'] > 2
)を作成し、それを用いてDataFrameをフィルタリングし、最後に.index.tolist()
を使用して選択された行のインデックスを抽出します。
NumPyのnp.where()
を活用した柔軟性
NumPyのnp.where()
関数は、より汎用的なアプローチを提供し、複雑な条件や複数の同時条件に特に役立ちます。
import numpy as np
indices = np.where(df['col1'] > 2)[0].tolist()
print(indices) # 出力: [2, 3, 4]
np.where(df['col1'] > 2)
はタプルを返します。最初の要素には、条件を満たすインデックスの配列が含まれています。[0]
を使用してこの要素にアクセスし、.tolist()
を使用してリストに変換します。
Pandasのquery()
を使った読みやすい複雑なクエリ
query()
メソッドは、特に複雑な条件の場合に可読性を向上させます。文字列式を使用して条件を指定できます。
indices = df.query('col1 > 2').index.tolist()
print(indices) # 出力: [2, 3, 4]
#複数の条件の例
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices) # 出力: [2]
query()
メソッドは条件の文字列表現を直接受け付けるため、特に複数の条件や複雑な条件の場合に可読性が大幅に向上します。
結論: 各メソッドは条件に基づいてインデックスを効果的に取得します。ブールインデックスは単純な条件に最適です。np.where()
はより複雑なシナリオを処理します。query()
は高度なフィルタリングの可読性に優れています。