2016-09-20 7 views
1

私はPandaデータフレーム列を持っており、私の列のすべての値が別のリストから来ているかどうかをチェックしたいと思います。データフレームの一意の値をリストと比較するにはどうすればよいですか?

たとえば、私の列のすべての値がAまたはBであるかどうかをチェックしたいと思います。私のコードは次の入力に対してtrueを返す必要があります。

myValues = ['A','B'] 
df = pd.DataFrame(['A','B','B','A'],columns=['Col']) # True 
df = pd.DataFrame(['A','A'],columns=['Col']) # True 
df = pd.DataFrame(['B'],columns=['Col']) # True 
df = pd.DataFrame(['B','C'],columns=['Col']) # False 
+0

リストをシリーズに変換すれば、各dfの 's = pd.Series(myValues)'と 's.isin(df ['Col'])。all()'のようなことができます – EdChum

+3

実際にはすべての場合に 'df ['Col1']。isin(myValues).all()'を実行するだけです – EdChum

答えて

1
あなたは現在、すべての値かどうかを返すように isinを使用して、ブール配列を生成するためにあなたのリストを渡すと allとすることができ

:ここでは

In [146]:  
myValues = ['A','B'] 
df = pd.DataFrame(['A','B','B','A'],columns=['Col']) # True 
print(df['Col'].isin(myValues).all()) 
df = pd.DataFrame(['A','A'],columns=['Col']) # True 
print(df['Col'].isin(myValues).all()) 
df = pd.DataFrame(['B'],columns=['Col']) # True 
print(df['Col'].isin(myValues).all()) 
df = pd.DataFrame(['B','C'],columns=['Col']) # False 
print(df['Col'].isin(myValues).all()) 


True 
True 
True 
False 
1

があります代替ソリューション:

df.eval('Col in @myValues') 

デモ:

In [78]: pd.DataFrame(['A','B','B','A'],columns=['Col']).eval('Col in @myValues') 
Out[78]: 
0 True 
1 True 
2 True 
3 True 
dtype: bool 

In [79]: pd.DataFrame(['A','A'],columns=['Col']).eval('Col in @myValues') 
Out[79]: 
0 True 
1 True 
dtype: bool 

In [80]: pd.DataFrame(['B'],columns=['Col']).eval('Col in @myValues') 
Out[80]: 
0 True 
dtype: bool 

In [81]: pd.DataFrame(['B','C'],columns=['Col']).eval('Col in @myValues') 
Out[81]: 
0  True 
1 False 
dtype: bool 
関連する問題