2 回答

TA贡献1757条经验 获得超7个赞
在 groupby 中,设置sort为False,获取cumsum,然后过滤不等于 的行0:
df.loc[df.groupby(["group"], sort=False).target.cumsum() != 0]
group value target
2 1 3 2
3 1 4 0
4 1 5 1
8 2 4 1
9 2 5 3

TA贡献1834条经验 获得超8个赞
这个应该做 我相信你可以用 less 做到这一点reset_index(),但如果你的数据框不是太大,这不应该影响太多速度:
idx = dff[dff.target.ne(0)].reset_index().groupby('group').index.first()
mask = (dff.reset_index().set_index('group')['index'].ge(idx.to_frame()['index'])).values
df_final = dff[mask]
输出:
0 group value target
3 1 3 2
4 1 4 0
5 1 5 1
9 2 4 1
10 2 5 3
添加回答
举报