检查一列是否仅包含一个特定值而没有其他内容

Check if a column contains only one particular value and nothing else

我有一个类似下面但更大的数据框:

import pandas as pd
df = pd.DataFrame({'text': ['Can you open the door?', 'Open the window', 'Call the hair salon.'],'info': ['on', 'on', 'off']})

我想根据信息栏中的内容打印不同的值。例如:

if all values in 'info' == 'on':
   print('all values are on')
elif all values in 'info' == 'off':
    print('all values are off')
elif 'info' contains both ('on' and 'off'):
    print('both values exist')

所以我做了以下事情:

if all(df['info'].unique() == ['on']):
    print('all values are on')
elif all(df['info'].unique() == ['off']):
    print('all values are off')
elif all(df['info'].unique() == ['off','on']):
    print('both values exist')

但我没有得到任何输出,我需要一个一致的解决方案,所以如果与我给出的示例不同,所有值实际上只是 'on' 或 'off',我仍然会得到正确的输出。

使用 sets 比较值,优点是顺序不重要,相同的集合是 set(['off','on']) == set(['on','off']):

s = set(df['info'])

if s == set(['on']):
    print('all values are on')
elif (s == set(['off'])):
    print('all values are off')
elif (s == set(['off','on'])):
    print('both values exist')

一般解决方案:

s = set(df['info'])

if len(s) == 1:
    print(f'all values are {list(s)[0]}')
else:
    print(f'multiple values exist - {", ".join(s)}')

要检查所有值是否都“打开”,您可以使用:

df['info'].eq('on').all()
# False

您还可以使用:

out = df['info'].unique()

if len(out)>1:
    print('both values exist')
else:
    print(f'all values are {out[0]}')

全开输出:

all values are on