gpt4 book ai didi

python - Pandas 删除所有 0,直到多索引的每个级别中的第一个非零值

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:28 26 4
gpt4 key购买 nike

我正在处理一个 pandas MultiIndex 数据集,其中许多不同的数据组(项目 1、项目 2 等)都有 0。我只想删除带有 0 的行,其中 0 位于 Item 组的开头。如果 0 出现在非零数字之后,我不想删除它。如何删除所有零直到每个组(索引外)中的第一个非零值?

原始数据

                          Quantity
Item1 2016-05-08 0.0
2016-05-15 0.0
2016-05-22 0.0
2016-05-29 456
2016-06-05 22
Item2 2018-03-08 0.0
2018-03-15 300
2018-03-21 0.0
2018-03-29 0.0
2018-03-05 433

期望的输出

                          Quantity
Item1 2016-05-29 456
2016-06-05 22
Item2 2018-03-15 300
2018-03-21 0.0
2018-03-29 0.0
2018-03-05 433

最佳答案

本质上是一个孤岛和缺口问题。每次您在组中达到非零值时,都会创建一个新岛。然后你的工作就是移除那些岛屿 0。代码:

islands = (df['Quantity'] != 0).groupby(level=0).cumsum()
df[islands != 0]

发生的事情的慢动作:

                    Quantity   Quantity != 0?   cumsum
Item1 2016-05-08 0.0 False 0
2016-05-15 0.0 False 0
2016-05-22 0.0 False 0
2016-05-29 456 True 1
2016-06-05 22 True 2
------------------------------------------------------
Item2 2018-03-08 0.0 False 0
2018-03-15 300 True 1
2018-03-21 0.0 False 1
2018-03-29 0.0 False 1
2018-03-05 433 True 2

最后,您使用 cumsum == 0 删除行

关于python - Pandas 删除所有 0,直到多索引的每个级别中的第一个非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com