如果行等于另一列中所有唯一值的布尔索引- pandas



我想使用单独的列返回一个布尔索引。如果EndItem中,我想返回False。

我满足这些条件,但我想考虑Seq中的所有唯一值。对于Seq中的每个唯一组,如果任何一行符合前面的条件,则为所有这些唯一组返回False。

df = pd.DataFrame({      
'Item' : ['Start','A','B','B','G','Start','A','B','B','A','X','Start','A','H'],        
})
End = ['X','Y','Z']
df['Seq'] = df['Item'].eq('Start').groupby(df['Item'].eq('Start').cumsum()).transform('idxmax')

m2 = df.Item.isin(End)

:

0      True
1      True
2      True
3      True
4      True
5      True
6      True
7      True
8      True
9      True
10    False
11     True
12     True
13     True

目的:

0      True
1      True
2      True
3      True
4      True
5      True
6     False
7     False
8     False
9     False
10    False
11     True
12     True
13     True

max代替idxmax,然后否定结果:

~df.Item.isin(End).groupby(df.Item.eq('Start').cumsum()).transform('max')
0      True
1      True
2      True
3      True
4      True
5     False
6     False
7     False
8     False
9     False
10    False
11     True
12     True
13     True
Name: Item, dtype: bool

排除包含Start:

的行
~(df.Item.isin(End).groupby(df.Item.eq('Start').cumsum()).transform('max') & df.Item.ne('Start'))

Seqtransform的布尔掩码m2any进行分组,然后将输出取反

~(m2.groupby(df['Seq']).transform('any'))

0      True
1      True
2      True
3      True
4      True
5     False
6     False
7     False
8     False
9     False
10    False
11     True
12     True
13     True
Name: Item, dtype: bool

相关内容

  • 没有找到相关文章

最新更新