基于条件在pandas中过滤数据行的解决方案

5

我有以下示例数据,想要过滤出符合条件的数据:(col1 = 'A' and col2 = '0')。 我们希望保留行数据直到下一个 (col1 = 'A')
我想使用pandas dataframe实现,但不知道如何操作。

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个回答

4
我们首先通过groupby'A'开头的行块进行分组,然后将col2的第一个值传播到该组的所有行。从这个结果中,我们选取所有col20的行。
 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>

1
很好的回答@Stef - Shubham Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接