【问题标题】:How to select row with minimum distance [duplicate]如何选择距离最小的行[重复]
【发布时间】:2020-12-18 13:15:09
【问题描述】:

我正在检查NYC MVA 数据集。在 1,697,572 条记录中,我确定大约有 518,000 条缺少邮政编码数据:

最小数据样本

   CRASH DATE CRASH TIME BOROUGH ZIP CODE  LATITUDE  LONGITUDE                      LOCATION
0  07/13/2019       4:10     NaN      NaN  40.69114  -73.80488    POINT (-73.80488 40.69114)
1  06/27/2019      21:30     NaN      NaN  40.58353  -73.98418  POINT (-73.984184 40.583534)
2  07/05/2019      19:40     NaN      NaN  40.61017  -73.92289   POINT (-73.92289 40.610165)
3  06/30/2019       2:30     NaN      NaN  40.70916  -73.84107   POINT (-73.84107 40.709156)
4  07/18/2019      17:50     NaN      NaN  40.74617  -73.82473   POINT (-73.82473 40.746174)
np.sort(df['ZIP CODE'].astype('str').unique())[:10]
[Out]: array(['     ', '10000', '10000.0', '10001', '10001.0', '10002',
       '10002.0', '10003', '10003.0', '10004'], dtype=object)

empty = np.sort(df['ZIP CODE'].astype('str').unique())[0]
empty_cells = df['ZIP CODE'].isin([empty, np.nan])
len(empty_cells[empty_cells==True])
[Out]: 518797

考虑到数据集的大小,我知道我可能可以通过基于 LONGITUDELATITUDE 特征的 ZIP 数据的最近 MVA 的欧几里德距离来纠正很多问题。

对于初学者,我尝试创建一个新列,它可以使用以下方法简单地找到两个纵向点之间的最小距离:

apply(lambda x: df.loc[min(abs(df['LONGITUDE'] - df.loc[x, 'LONGITUDE'])),:])

但是有了这个代码,我电脑的粉丝差点把我送上飞机。我在我的电脑出现问题之前将其关闭。

我知道有一种方法可以创建一个允许我选择最小欧几里得距离的列,但我只是不确定如何编写初始选择代码。

【问题讨论】:

标签: python pandas lambda apply


【解决方案1】:

我认为这不是获取邮政编码的最佳解决方案,但我使用 BallTree 按距离获取最近的邻居。像这样的:

from sklearn.neighbors import BallTree

tree = BallTree(df_mva[['Latitude', 'Longitude']].values, leaf_size=2)

df['distance_nearest'], df['id_nearest'] = tree.query(
    df[['latitude', 'longitude']].values, # The input array for the query
    k=1, # The number of nearest neighbors
)

df_merged = pd.merge(df,
                df_mva,
                left_on='id_nearest',
                right_index=True)

您可以根据自己的代码调整它,可能需要创建 2 个数据框,其中 df 是没有邮政编码的数据框,df_mva 是带有邮政编码的数据框。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2017-05-19
    • 2021-10-19
    • 2021-07-07
    • 2022-08-18
    相关资源
    最近更新 更多