在二进制列中标识特定大小的1的第一个簇

时间:2019-07-09 18:41:41

标签: python-3.x

我有一个数据框,其中的一列是具有1和0的二进制列。我想在该列中标识大小为5的第一个1s簇(即第一次出现5个连续的1s),然后删除该簇中第一个1以后的所有后续行。

我尝试编写一个循环,该循环将计数为1,并在遇到零时“继续”(即中断并重新开始)。但是,由于不确定语法,因此无法正确编写。我是Python的新手,如果以下完全错误,我们深表歉意-

for i in randomstring["random"]:
    i = i+1
    if i%5 == 0:
        i.remove(i)
    elif i == 0:
        continue

上面的循环没有错误,但是我不确定它实现了什么,没有输出。

这大致是数据框的外观(没有其他列):

  1. 1
  2. 0
  3. 1
  4. 0
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1

我想要这个-

  1. 1
  2. 0
  3. 1
  4. 0
  5. 1

1 个答案:

答案 0 :(得分:0)

如果我改写您的问题。好像您想找到一个索引。

我将为您提出一种使用numpy的方法(仅出于个人原因)。

#Just for the purpose of test
X=np.random.randint(0,2,100)

#TO have the index
Z=np.arange(len(X))

#Under it works only cause you have 0 and 1.
M=np.diff(X.cumsum())==0
U=X.cumsum()[1:][M]
Z=Z[1:][M]
COUNT=np.zeros(len(U))
COUNT[1:]=np.diff(U)
COUNT[0]=U[0]
#In COUNT there is the COUNT of consecutive 1
Z=Z-COUNT
#It gives you all the first index where the number of consecutive zero is 5
ANSWER=np.array(Z[COUNT==5],dtype=np.int32)

这太长了:D。我试图找到一个更好的解决方案,并在进行操作时进行编辑。

首次编辑:更改为使用numpy差异。