Python 仅当列值等于某个值或列值位于该值(1)之间的行时,才保留列值

Python 仅当列值等于某个值或列值位于该值(1)之间的行时,才保留列值,python,pandas,Python,Pandas,我想筛选出不等于某个数字的行,或者在该行之前和/或之后没有该数字的行 请举例说明。我有以下数据帧: df_test= pd.DataFrame() df_test= df_test.assign(group='') df_test.group= [3,3,5,3,1,3,4,1,1,1,5,3,1,1,3,6,7] group 0 3 1 3 2 5 3 3 4 1 5 3 6 4 7 1

我想筛选出不等于某个数字的行,或者在该行之前和/或之后没有该数字的行

请举例说明。我有以下数据帧:

df_test= pd.DataFrame()
df_test= df_test.assign(group='')
df_test.group= [3,3,5,3,1,3,4,1,1,1,5,3,1,1,3,6,7]


    group
0       3
1       3
2       5
3       3
4       1
5       3
6       4
7       1
8       1
9       1
10      5
11      3
12      1
13      1
14      3
15      6
16      7
我想过滤掉所有不等于3的值,除了1:如果1在一行中,其中3在前面和/或后面

最终结果如下所示:

   group
0      3
1      3
2      3
3      1
4      3
5      3
6      1
7      1
8      3
我试过了

df_test[(df_test.group == 1) | (df_test.group==3)]
但很明显,这会保留所有的1,而不仅仅是3

非常感谢您的任何帮助:-

用于按==比较和按移位的系列,最后一个链3掩码按|按位或:

m1 = df_test['group'].eq(1)
m2 = df_test['group'].eq(3)
m3 = m1 & df_test['group'].shift(-1).eq(3)
m4 = m1 & df_test['group'].shift().eq(3)

df_test = df_test[m2|m3|m4]
print (df_test)
    group
0       3
1       3
3       3
4       1
5       3
11      3
12      1
13      1
14      3