У меня есть два фрейма данных. Каждый из них содержит местоположения (X, Y) и значение для этой точки. Для каждой точки в первом кадре данных я хочу найти ближайшую точку во втором кадре данных, а затем найти разницу. У меня есть работающий код, но он использует цикл for, который работает медленно.
Любые предложения о том, как ускорить это? Я знаю, что, как правило, неплохо избавиться от циклов for в пандах для повышения производительности, но я не понимаю, как это сделать в этом случае.
Вот пример кода:
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.random.rand(10,3), columns=['val', 'X', 'Y'])
df2=pd.DataFrame(np.random.rand(10,3), columns=['val', 'X', 'Y'])
nearest=df1.copy() #CORRECTION. This had been just =df1 which caused a problem when trying to compare to answers submitted.
for idx,row in nearest.iterrows():
#Find the X,Y points closest to the selected point:
closest=df2.ix[((df2['X']-row['X'])**2+(df2['Y']-row['Y'])**2).idxmin()]
#Set the max to the difference between the current row and the nearest one.
nearest.loc[idx,'val']= df1.loc[idx,'val'] - closest['val']
Поскольку я использую это для больших фреймов данных, для вычисления требуется много времени.
Спасибо,