亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在熊貓組中查找第一個非零元素

在熊貓組中查找第一個非零元素

斯蒂芬大帝 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 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號