2016-09-20 168 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 
相关问题