一种基于pandas条件过滤部分数据的解决方案

use*_*815 5 python algorithm pandas

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

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

例如,我们有这样的数据

col1 col2
 A    0
 C
 A    1 
 B
 C
 A    1 
 B
 B
 C
 A    0 
 B 
 C
 A    1 
 B 
 C
 C 
Run Code Online (Sandbox Code Playgroud)

我想要达到的结果是:

col1 col2 
 A    0 
 C 
 A    0 
 B 
 C 
Run Code Online (Sandbox Code Playgroud)

非常感谢

Ste*_*tef 4

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

 df[df.groupby(df.col1.eq('A').cumsum()).col2.transform('first').eq(0)]
Run Code Online (Sandbox Code Playgroud)

样本数据:

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'})
Run Code Online (Sandbox Code Playgroud)

结果:

   col1  col2
0     A     0
1     C  <NA>
9     A     0
10    B  <NA>
11    C  <NA>
Run Code Online (Sandbox Code Playgroud)