python - Python数据框通过列获取零段的边界
问题描述
我有一个熊猫系列:
s = [3,7,8,0,0,0,6,12,0,0,0,0,0,8,5,0,2]
我想找到所有有零段开始或结束的索引,其中零的数量超过 3,所以我想在这里得到:
[8,12]
最好的方法是什么?
谢谢
解决方案
我发现这种使用more_itertools
考虑的方式s
是系列(不是您提供的列表):
首先将列表分组为满足条件的索引的连续元素:
import more_itertools as mit
a = [list(group) for group in mit.consecutive_groups(s.loc[s.eq(0)].index.tolist())]
其次,从列表中选择第一个和最后一个条目
list(set([i[0] for i in a]+[x[-1] for x in a]))
#[3, 5, 8, 12, 15]
编辑获取第一个和最后一个索引,其中 0 大于 3 使用:
list(set([i[0] for i in a if len(i)>3]+[x[-1] for x in a if len(x)>3]))
#[8, 12]
推荐阅读
- ffmpeg - ffmpeg:在不改变实际宽度和高度的情况下缩放视频
- python - 在 PyQtGraph 和 PySide2 中使用 ImageView 修复文本位置
- networking - 子网 - 网络
- spartacus-storefront - 如何更改 Spartacus 中的页面布局?
- r - 数据帧上的反向对数转换
- android - 获取设备位置在我的代码中不起作用?
- javascript - 如何从数据库中获取然后渲染反应组件?
- python - 在 Paramiko 中仅记录 SSH 身份验证横幅
- python-3.x - 如何计算视频中物体行进的距离?
- scala - 如何从 spark scala 中的外部文件读取文件路径和架构?