如何将数据框唯一值与列表进行比较?

时间:2016-09-20 12:27:00

标签: python pandas

我有一个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

2 个答案:

答案 0 :(得分: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 :(得分: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