检查数字列表是一个子集

时间:2014-07-28 11:01:24

标签: python pandas

我有一个像这样的python pandas数据框:

data = ['13,12', '8, 7', '12,1', '7', '2,6']
index = 'a', 'b', 'c', 'd', 'e'

col = ['colnames']

df = pd.DataFrame(data, index=index, columns = col)

df

     colnames
a    13,12
b    8, 7
c    12,1
d    7
e    2,6

我想看看'colnames'列中的数字是否在以下数字列表中:

7,8,9,10,12,13,15,23,24,25,26。

我尝试使用以下函数来检查这是否属实,如果是,它应该返回'good',否则,应该返回'poor':

def quality_check(qaulity):

     for numbers in str(quality):
            if numbers  in [7, 8, 9, 10, 12, 13, 15, 23, 24, 25, 26]:
                return "good"
            else:
                return "poor"


df['colnames'].map(quality_check)

预期结果是:

a   good
b   good
c   poor
d   good
e   poor

然而,这就是我所得到的:

a    poor
b    poor
c    poor
d    poor
e    poor

有谁知道如何做到这一点或更好的方法吗?我非常感谢任何帮助。 非常感谢。

2 个答案:

答案 0 :(得分:1)

看起来你正在将字符串与整数进行比较,这些整数不会起作用:

>>> for n in '123':
...     print n,
...     if n in [1, 2, 3]:
...         print 'yes'
...     else:
...         print 'no'
...         
1 no
2 no
3 no

答案 1 :(得分:1)

我认为您需要这样的内容来检查所有数字,您的功能是没有检查所有数字并且正在将intsstrings进行比较:

def quality_check(q):
    spl = q.split(",") # split to check both numbers
    if  all(x in  ["7", "8", "9", "10", "12", "13", "15", "23", "24", "25", "26"]for x in  spl):
        return "good"
    else:
        return "poor"

输出:

a    good
b    good
c    poor
d    good
e    poor
Name: colnames, dtype: object

只要all遇到不在其中的元素,它就会返回False。

您还可以使用sets来检查subsetsmap元素ints

col = ['colnames']
def quality_check(q):
    spl = map(int,q.split(","))  #  make all ints  and split into individual nums
    if set(spl).issubset( [7, 8, 9, 10, 12, 13, 15, 23, 24, 25, 26]):
        return "good"
    else:
        return "poor"

您也可以使用第一个示例的集合,元素不必是整数。