我想删除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'])
答案 0 :(得分:2)
groupby
检查cummax
和shift
,以删除每位用户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