# value is a 1
m = df['a'].eq(1)
# value is either preceded or followed by a non-1
m2 = ~(m.shift(fill_value=False)|m.shift(-1, fill_value=False))
# keep those indices, reshape 2 by 2, convert to list
out = df.index[m&m2].to_numpy().reshape((-1, 2)).tolist()
4条答案
按热度按时间tf7tbtn21#
你可以使用
numpy
来解决这个问题,使用values
,where
,concatenate
,diff
方法。kninwzqo2#
首先,我们可以为每组连续数字添加一个列
b
,其中包含不同的数字然后我们只考虑1的打击,对于每个组,我们取第一个和最后一个指数
如果你正在寻找一个列表作为输出,你可以添加
.to_list()
4zcjmb1e3#
创建分组器以划分组
grouper.head()
:前两个属于组1,接下来的三个连续的1属于组2
然后按分组器分组
输出:
t3irkdon4#
使用布尔掩码和numpy来整形:
输出: