首页 > 解决方案 > Python数据框通过列获取零段的边界

问题描述

我有一个熊猫系列:

s = [3,7,8,0,0,0,6,12,0,0,0,0,0,8,5,0,2]

我想找到所有有零段开始或结束的索引,其中零的数量超过 3,所以我想在这里得到:

[8,12]

最好的方法是什么?

谢谢

标签: pythonpandasseriesdata-munging

解决方案


我发现这种使用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]

推荐阅读