我有一个带有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
删除先前的行。
在上面的情况下将是这样的:
User_id type info
31 R*1005 no
31 R*10335 no
25 R*9017 no
25 R*9015 no
46 R*9470 no
如何以一种聪明的方式做到这一点?
答案 0 :(得分: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