我有以下示例数据,我想过滤一条数据,当(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
非常感谢您
答案 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>