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