为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫组中查找第一个非零元素

在熊猫组中查找第一个非零元素

斯蒂芬大帝 2023-04-25 15:18:41
我有一个数据框,您可以在下面看到它的情况。命名的列target是我想要的列:group    value    target  1        1        0  1        2        0  1        3        2  1        4        0  1        5        1  2        1        0  2        2        0  2        3        0  2        4        1  2        5        3现在我想在每个组的列中找到第一个非零值target,并删除每个组中该行之前的行。所以输出应该是这样的:group    value    target  1        3        2  1        4        0  1        5        1  2        4        1  2        5        3我看过这篇文章,但我不知道如何更改代码以获得我想要的结果。我怎样才能做到这一点?
查看完整描述

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


查看完整回答
反对 回复 2023-04-25
?
MMMHUHU

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


查看完整回答
反对 回复 2023-04-25
  • 2 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信