根据条件删除 Pandas Dataframe 中的前几行
Delete previous rows in Pandas Dataframe based on condition
我有一个包含 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
当第 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
行:
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
我有一个包含 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
当第 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
行:
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