从给定索引中找出最接近的非零对



我有一个数据帧-

df = pd.DataFrame({'A':[1,1,0,0,0,0,1,1,0],'B':[0,0,0,0,1,1,0,0,0]})

现在我想计算 A 列中 1,1 的出现次数最接近 B 列中 0110 模式的出现次数。 我在 0110(colB( 中有 1st 1 的索引,这里 4,我将得到的答案是 -2,因为列 A(索引 6,7(中的对 11 落后 2 个索引。

我对010模式的尝试-

anchor = index_value
hnops = min((anchor - df[df.A != 0].index), key=abs) 

我认为这最好通过numpy列表理解来完成:

Apos = [i for i in range(len(df.A)-1) if list(df.A[i:i+2]) == [1,1]]
Bpos = [i+1 for i in range(len(df.B)-3) if list(df.B[i:i+4]) == [0,1,1,0]]
Apos, Bpos
>>> ([0, 6], [4])

然后,您可以通过查找最接近的元素从Apos找到Bpos中每个元素的最小值

diff = [] 
for i in range(len(Apos)):
index = np.argmin(np.abs(np.asarray(Bpos) - Apos[i]))
answer = Bpos[index] - Apos[i]
diff.append(answer)
diff
>>> [4, -2]

最新更新