Удалить предыдущие строки в Pandas Dataframe на основе условия - PullRequest
1 голос
/ 04 марта 2020

У меня есть фрейм данных с user_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

Я хочу удалить предыдущие строки из user_id, когда столбец info равен "yes". В приведенном выше случае будет выглядеть так:

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

Как это сделать умным способом?

1 Ответ

0 голосов
/ 04 марта 2020

Идея - проверка, если хотя бы один 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
...