猿问

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

我有一个数据框,您可以在下面看到它的情况。命名的列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

我看过这篇文章,但我不知道如何更改代码以获得我想要的结果。

我怎样才能做到这一点?


斯蒂芬大帝
浏览 117回答 2
2回答

长风秋雁

在 groupby 中,设置sort为False,获取cumsum,然后过滤不等于 的行0:df.loc[df.groupby(["group"], sort=False).target.cumsum() != 0]    group   value   target2      1       3    23      1       4    04      1       5    18      2       4    19      2       5    3

MMMHUHU

这个应该做 我相信你可以用 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'])).valuesdf_final = dff[mask]输出:0  group value  target3      1     3       24      1     4       05      1     5       19      2     4       110     2     5       3
随时随地看视频慕课网APP

相关分类

Python
我要回答