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
添加回答
舉報