iso_a3 105 2017-01-01 00:00:00 105 OINT 39BLZ 120 2017-01-01 00:00:00 BIH 283 217-01-16 00:00:00 SLV 527 2017-01-31 00:00:00 -99 600 2017-01-31 00:00:00 196 OINT(-748.528981377441 4.598369421147822="text align=left;">COL861 2017-03-02 00:00:00 NIC 1001 2017-03-02 00:00:00 193 POINT(116.38633982565943 39.93083808990906 td style="text align=left;">CHN 1161 2017-03-17 00:00:00 151 OINT style="text-align:left;">DOM1451 2017-04-16 00:00:00 37 OINT(10.179678099212026 36.80277813623144)>td style="text-align:right;">1320>2017-04-16 0:0:00 81 style="text align=left;">TUN1589 2017-04-16 00:00:00 DEU
我正在尝试合并两个地理数据帧。(比方说"df_a"one_answers"df_b")我想通过时间和几何加入这两个dfs
在"df_a"的情况下,它的几何是"多极子"。
时间 | 功能1 | 几何体 | ||
---|---|---|---|---|
'2017-01-01' | 10 | 多边((-35.12334 3.12648,-35.123342… | ||
'2020-12-31' | 4 | 多边 |
执行sjoin()
:后可以过滤行
gpd.sjoin(df_a, df_b, how="left", predicate="intersects").loc[
lambda d: d["time_left"].eq(d["time_right"])
]
生成数据集的MWE
import geopandas as gpd
import pandas as pd
# synthesize some geodataframes matching structure in question
df_a = (
pd.merge(
pd.Series(pd.date_range("1-jan-2017", "31-dec-2020", freq="15D"), name="time"),
gpd.read_file(gpd.datasets.get_path("naturalearth_cities"))
.reset_index()
.rename(columns={"index": "feature 1"})
.drop(columns=["name"]),
how="cross",
)
.sample(100)
.sort_values(["time", "feature 1"])
)
df_a = gpd.GeoDataFrame(df_a)
df_b = (
pd.merge(
pd.Series(pd.date_range("1-jan-2017", "31-dec-2020", freq="15D"), name="time"),
gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
.reset_index()
.rename(columns={"index": "feature 2"})
.drop(columns=["name", "pop_est", "continent", "gdp_md_est"]),
how="cross",
)
# .sample(50)
.sort_values(["time", "feature 2"])
)
df_b = gpd.GeoDataFrame(df_b)