我有一个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 :(得分: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