Nat*_*ate 3 python multi-index pandas pandas-groupby
我正在处理 pandas MultiIndex 数据集,其中许多不同的数据组(项目 1、项目 2 等)都有 0。我只想删除包含 0 的行,其中 0 位于项目组的开头。如果非零数字后面有 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
Run Code Online (Sandbox Code Playgroud)
所需输出
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
Run Code Online (Sandbox Code Playgroud)
本质上是一个岛屿和缺口问题。每当您在组中达到非零值时,就会创建一个新岛屿。那么你的工作就变成了移除那些岛屿 0。代码:
islands = (df['Quantity'] != 0).groupby(level=0).cumsum()
df[islands != 0]
Run Code Online (Sandbox Code Playgroud)
慢镜头记录一下发生的事情:
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
Run Code Online (Sandbox Code Playgroud)
最后,您删除行cumsum == 0
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |