删除重复点

Dropping Duplicate Points

我有两个geodataframesgeoseries,都由几千个points.

组成

我的要求是追加(合并)geodataframes 和删除重复点。

换句话说,output = gdf1 all points + gdf2 points that do not intersect with gdf1 points

我试过:

output = geopandas.overlay(gdf1, gdf2, how='symmetric_difference')

但是,速度很慢。

你知道更快的方法吗?

这是另一种使用 pandas 和时间组合数据帧的方法,与 geopandas 相比:

import pandas as pd
import numpy as np

data1 = np.random.randint(-100, 100, size=10000)
data2 = np.random.randint(-100, 100, size=10000)

df1 = pd.concat([-pd.Series(data1, name="longitude"), pd.Series(data1, name="latitude")], axis=1)
df1['geometry'] = df1.apply(lambda x: (x['latitude'], x['longitude']), axis=1)

df2 = pd.concat([-pd.Series(data2, name="longitude"), pd.Series(data2, name="latitude")], axis=1)
df2['geometry'] = df2.apply(lambda x: (x['latitude'], x['longitude']), axis=1)

df1 = df1.set_index(["longitude", "latitude"])
df2 = df2.set_index(["longitude", "latitude"])

%timeit pd.concat([df1[~df1.index.isin(df2.index)],df2[~df2.index.isin(df1.index)]])
    
112 ms ± 217 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

这似乎比使用 geopandas

快很多
import geopandas as gp

gdf1 = gp.GeoDataFrame(
    df1, geometry=gp.points_from_xy(df1.index.get_level_values("longitude"), df1.index.get_level_values("latitude")))
gdf2 = gp.GeoDataFrame(
    df2, geometry=gp.points_from_xy(df2.index.get_level_values("longitude"), df2.index.get_level_values("latitude")))

%timeit gp.overlay(gdf1, gdf2, how='symmetric_difference')

29 s ± 317 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

但也许您需要进行某些优化,如前所述here

该函数从每个 df 中检查不匹配的索引,然后将它们合并。

df1 = pd.DataFrame([1,2,3,4],columns=['col1']).set_index("col1")
df2 = pd.DataFrame([3,4,5,6],columns=['col1']).set_index("col1")
pd.concat([df1[~df1.index.isin(df2.index)],df2[~df2.index.isin(df1.index)]])

col1
1
2
5
6