web-dev-qa-db-ja.com

パンダ:特定の値を持つ行が存在するかどうかを確認します

2次元(またはそれ以上)pandas DataFrameは次のようになります。

_>>> import pandas as pd
>>> df = pd.DataFrame([[0,1],[2,3],[4,5]], columns=['A', 'B'])
>>> df
   A  B
0  0  1
1  2  3
2  4  5
_

np.array([2,3])のようなnumpy配列があり、dfに配列の内容と一致する行があるかどうかを確認したいとします。ここでは、答えは明らかに正しいはずですが、たとえばnp.array([1,2])は、列Aに1と列Bに2の両方を持つ行がないため、falseを返す必要があります。

確かにこれは簡単ですが、今は表示されません。

24
Robin

それは本当に簡単であることが判明しました、次はここで仕事をします:

>>> ((df['A'] == 2) & (df['B'] == 3)).any()
True
>>> ((df['A'] == 1) & (df['B'] == 2)).any()
False

誰かが、配列と列のリストを直接渡すことができるより良い解決策を思いつくかもしれません。

df['A'] == 2演算子は&演算子と同様に強力にバインドするため、==を囲む括弧はオプションではありません。

42
Robin

より簡単な方法は次のとおりです。

a = np.array([2,3])
(df == a).all(1).any()
10
acushner

一致が発生したインデックスも返したい場合:

index_list = df[(df['A'] == 2)&(df['B'] == 3)].index.tolist()
4
sparrow