我有一个数据框-
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)
答案 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]