簡體   English   中英

用另一個列的每個值迭代數據框的一行的值

[英]iterate a value of a row of a dataframe with each value of a column in another

我試圖用df2的每一行循環df1的每一行,並在df1中創建一個新的col並將min(所有值)存儲在其中。

lat_sc= shopping_centers['lat']
long_sc= shopping_centers['lng']
for i, j in zip(lat_sc,long_sc):
    for lat_real, long_real in zip(real_estate['lat'],real_estate['lng']):
        euclid_dist.append( lat_real - i)
        short_dist.append(min(euclid_dist))
        euclid_dist = []

結果:df1 ['shortest'] = min(df1 ['lat']- each lat of df2

df1 ['nearest sc'] =對應的sc_id

編輯以在df1中包含sc_id

隨着df2變大,這可能需要大量的計算,但是您可以找到df1距離與所有df2距離之差(可以更有效地執行此操作)

def find_euclid_dist(row):
    dist_arr = np.sqrt((ref_lats - row["lat"])**2 + (ref_longs - row["lng"])**2)
    return np.min(dist_arr)

ref_lats = df2["lat"].values
ref_longs = df2["lng"].values
df1["shortest"] = df1.apply(find_euclid_dist, axis=1)

如何從scipy使用cdist

from scipy.spatial.distance import cdist

df1['shortest'] = cdist(df1[['lat','lng']], df2[['lat','lng']], metric='euclidean').min(1)

print(df1)返回:

         lat        lng          addr_street    shortest
0 -37.980523 -37.980523     37 Scarlet Drive  183.022436
1 -37.776161 -37.776161  999 Heidelberg Road  182.817951
2 -37.926238 -37.926238        47 New Street  182.968096
3 -37.800056 -37.800056  3/113 Normanby Road  182.841849

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM