Редактировать: добавить опцию отрицательного просмотра в регулярном выражении
Опция 1 : использование отрицательного предвидения
In [887]: df
Out[887]:
cat
0 a,b,c
1 a,c,b
2 c,b,a
3 b,a,c
4 c,a,b
5 b,c,a
6 a,a,a
7 b,b,b
8 c,c,c
9 a,b
10 ab,a
11 b
12 ab,c
13 a,b,a
14 a,b,b
15 c,b,a
16 a,a,b
17 a,bc
18 a, b,c
19 a,bb,c
In [888]: ignore_st = r'(?:([abc]),(?!.*\1)){2}[abc]'
In [896]: df['ignore'] = df.cat.str.contains(ignore_st).astype(int)
In [897]: df
Out[897]:
cat ignore
0 a,b,c 1
1 a,c,b 1
2 c,b,a 1
3 b,a,c 1
4 c,a,b 1
5 b,c,a 1
6 a,a,a 0
7 b,b,b 0
8 c,c,c 0
9 a,b 0
10 ab,a 0
11 b 0
12 ab,c 0
13 a,b,a 0
14 a,b,b 0
15 c,b,a 1
16 a,a,b 0
17 a,bc 0
18 a, b,c 0
19 a,bb,c 0
Вариант 2 : Это работает, только если каждая ячейка содержит точную комбинацию 'a, b, c'
Вместо использования str.contains
регулярное выражение, вы можете сравнить каждую ячейкув массив ['a', 'b', 'c']
In [800]: df
Out[800]:
cat
0 a,b,c
1 a,c,b
2 c,b,a
3 b,a,c
4 c,a,b
5 b,c,a
6 a,a,a
7 b,b,b
8 c,c,c
9 a,b
10 a,c
11 b
12 c
В каждой ячейке разделите на ','
, чтобы вывести список, отсортировать и сравнить каждую с ['a', 'b', 'c']
In [810]: df['ignore'] = df.cat.str.split(',').map(sorted).apply(lambda x: x == ['a', 'b', 'c']).astype(int)
In [811]: df
Out[811]:
cat ignore
0 a,b,c 1
1 a,c,b 1
2 c,b,a 1
3 b,a,c 1
4 c,a,b 1
5 b,c,a 1
6 a,a,a 0
7 b,b,b 0
8 c,c,c 0
9 a,b 0
10 a,c 0
11 b 0
12 c 0