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)
非常感谢
我们首先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)