2016-09-20 125 views
1

我有一個Panda數據框列,我想檢查列中的所有值是否都來自另一個列表。如何將數據幀唯一值與列表進行比較?

例如,我想檢查我的列中的所有值是否爲AB而沒有其他值。我的代碼應爲以下輸入返回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

如果您將列表轉換爲一系列,那麼您可以執行類似's = pd.Series(myValues)'然後s.isin(df ['Col'])。all()'爲每個df – 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 
相關問題