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

时间:2018-10-23 22:41:00

标签: python pandas

我有一个数据框-

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)中的第一个1的索引在这里4,我将得到的答案是-2,因为columnA(索引6,7)中的对11落后2个索引。

我尝试010模式-

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

1 个答案:

答案 0 :(得分:1)

我认为最好使用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来找到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]