[英]Matching two data frames of longitudes and latitudes in python
我有一个城市商店的经度和纬度列表。
ID Latitude Longitude
1 28.2828 48.8392
2 28.3829 48.2947
3 27.9274 48.9274
4 28.9284 48.1937
5 27.2749 48.2804
…
1000 27.9292 48.9284
我有另一个经度和纬度列表,商店位于 state。
ID Latitude Longitude
8392 28.73948 48.9284
7274 19.82744 27.2837
7293 28.72847 48.92847
8384 18.28474 83.29374
2848 28.92745 48.8293
…
使用 python,如何找到第二个数据帧中的哪些数据点位于第一个数据帧组成的区域中?
换句话说,这是我想要的结果,因为第二个数据框中的这些 ID 位于由第一个数据框组成的城市中。 所有其他 ID 都被过滤掉,因为它们跨越其他区域。
ID Latitude Longitude
8392 28.73948 48.9284
7293 28.72847 48.92847
2848 28.92745 48.8293
sjoin()
到其他点。 我模拟了这个以获得一些分数import pandas as pd
import geopandas as gpd
import io
import shapely
df_city = pd.read_csv(
io.StringIO(
"""ID Latitude Longitude
1 28.2828 48.8392
2 28.3829 48.2947
3 27.9274 48.9274
4 28.9284 48.1937
5 27.2749 48.2804
1000 27.9292 48.9284"""
),
sep="\s+",
)
df_state = pd.read_csv(
io.StringIO(
"""ID Latitude Longitude
8392 28.73948 48.9284
7274 19.82744 27.2837
7293 28.72847 48.92847
8384 18.28474 83.29374
2848 28.92745 48.8293"""
),
sep="\s+",
)
city_geom = shapely.geometry.MultiPoint(
gpd.points_from_xy(df_city["Longitude"], df_city["Latitude"])
).convex_hull
# have some overlapping points...
df_state2 = pd.concat([df_state, df_city.sample(2)])
gpd.GeoDataFrame(
df_state2, geometry=gpd.points_from_xy(df_state2["Longitude"], df_state2["Latitude"], crs="epsg:4326")
).sjoin(gpd.GeoDataFrame(geometry=[city_geom], crs="epsg:4326"))
ID | 纬度 | 经度 | 几何学 | index_right |
---|---|---|---|---|
1个 | 28.2828 | 48.8392 | 点 (48.8392 28.2828) | 0 |
3个 | 27.9274 | 48.9274 | 点 (48.9274 27.9274) | 0 |
m = gpd.GeoDataFrame(
df_state, geometry=gpd.points_from_xy(df_state["Longitude"], df_state["Latitude"], crs="epsg:4326")
).explore()
gpd.GeoDataFrame(geometry=[city_geom], crs="epsg:4326").explore(m=m)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.