删除大熊猫中的行,首先出现特定值

时间:2019-07-06 14:10:22

标签: python pandas

我想删除DataFrame中每个唯一用户的第一次出现的用户等于1的行及其以前的行。

例如,我有以下数据框,并且我想获得另一个数据框,该数据框删除第一个出现的“ val”列1中的行以及每个用户的前一行。

      user  val
0      1    0
1      1    1
2      1    0
3      1    1
4      2    0
5      2    0
6      2    1
7      2    0
8      3    1
9      3    0
10     3    0
11     3    0
12     3    1

     user  val 
0      1    0 
1      1    1
2      2    0 
3      3    0 
4      3    0 
5      3    0 
6      3    1 

样本数据

import pandas as pd 

s = [1,1,1,1,2,2,2,2,3,3,3,3,3]
t = [0,1,0,1,0,0,1,0,1,0,0,0,1]
df = pd.DataFrame(zip(s,t), columns=['user', 'val'])

1 个答案:

答案 0 :(得分:2)

groupby检查cummaxshift,以删除每位用户1列中的第一个'val'之前(包括该行)的所有行。

假设您的值是1或0,也可以用双倍的总和创建掩码。

m = df.groupby('user').val.apply(lambda x: x.eq(1).cummax().shift().fillna(False))
# m = df.groupby('user').val.apply(lambda x: x.cumsum().cumsum().gt(1)) 
df.loc[m]

输出:

    user  val
2      1    0
3      1    1
7      2    0
9      3    0
10     3    0
11     3    0
12     3    1