一种基于熊猫条件过滤某些数据行的解决方案

时间:2020-05-31 09:01:59

标签: python pandas algorithm

我有以下示例数据,我想过滤一条数据,当(col1 ='A'和col2 ='0')时,我们要保留行直到下一个(col1 ='A')
我想使用pandas数据框,但我不知道它是怎么回事。

df = pd.DataFrame({'col1': ['A', 'B', 'C'],  'col2': [0, 1]}) 

例如,我们有此数据

col1 col2
 A    0
 C
 A    1 
 B
 C
 A    1 
 B
 B
 C
 A    0 
 B 
 C
 A    1 
 B 
 C
 C 

我想要实现的结果是:

col1 col2 
 A    0 
 C 
 A    0 
 B 
 C 

非常感谢您

1 个答案:

答案 0 :(得分:4)

我们首先从'A'开始的groupby行块,然后将col2的第一个值传播到组的所有行。从该结果中,我们得到0中所有带有col2的行。

 df[df.groupby(df.col1.eq('A').cumsum()).col2.transform('first').eq(0)]

样本数据:

df = pd.DataFrame({'col1': list('ACABCABBCABCABCC'),
                   'col2': [0, None, 1, None, None, 1, None, None, None, 0, None, None, 1, None, None, None]}
                 ).astype({'col2': 'Int32'})

结果:

   col1  col2
0     A     0
1     C  <NA>
9     A     0
10    B  <NA>
11    C  <NA>