我有一个数据框如下所示:
person_id source_system r_diff
1 O NULL
1 O 0
1 O 9
1 O NULL
2 O 574
2 I 20
2 O 135
2 O 0
2 I 21
2 O 2
2 O 0
2 O 0
2 I 12
我想根据以下条件选择行:
条件1-选择所有源系统为I
的行
条件2-仅在(n-1)行的源系统为O
且差异为零时,才选择上一行 (n-1)。
只有当第n行的源系统为I
时才应用此条件2。 如果(n-1)行的源系统是I
,则我们不必做任何操作,因为条件1将处理它。
我们必须对每个人都应用这两个条件
我尝试了以下根据SO建议,但不确定如何使其工作。
m1 = df['visit_source_value'] == 'I'
m2 = df['diff'] <= 0
m3 = df.groupby('person_id')['diff'].shift(-1) <= 0
df = df1[m1 | m2 | m3]
我期望我的输出结果如下所示。
2 I 20
2 O 0
2 I 21
2 O 0
2 I 12
I
进行测试。 - jezrael