我有一个数据框,其中的一列是具有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
上面的循环没有错误,但是我不确定它实现了什么,没有输出。
这大致是数据框的外观(没有其他列):
我想要这个-
答案 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差异。