根据条件删除 Pandas 数据框中的先前行

3

我有一个数据框,其中包含用户ID以及他们的一些信息

User_id   type     info
31       R*1005    no
31       R*10335   no
25       R*1005    no
25       R*243     no
25       R*4918    yes
25       R*9017    no
25       R*9015    no
46       R*9470    no

当列info为"yes"时,我希望从user_id中删除之前的行。

在上述情况下,将会是这样:

User_id   type     info
31       R*1005    no
31       R*10335   no
25       R*9017    no
25       R*9015    no
46       R*9470    no

如何以聪明的方式实现这个?


所以一旦找到 "yes",你只删除前面两行吗?您当前的输出是在找到 "yes" 后的第一个和第二个,以及最后四行,这是您要实现的目标吗? - Anna Semjén
@AnnaSemjén 当找到“是”时,我想删除先前的行,以便在找到“是”的同一user_id中。要删除的先前行数可能会根据用户而变化。 - Otávio Augusto
1个回答

1

这个想法是测试组中是否至少有一个 yes,然后针对该组删除先前的 yes 行:

m = df['info'].eq('yes')
g = m.groupby(df['User_id'])

m1 = g.transform('any')
m2 = g.cumsum().ne(0)

df = df[(~m1 | m2) & ~m]
print (df)
   User_id     type info
0       31   R*1005   no
1       31  R*10335   no
5       25   R*9017   no
6       25   R*9015   no
7       46   R*9470   no

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