gpt4 book ai didi

python - Pandas 比较来自不同长度的不同帧的多个列值

转载 作者:行者123 更新时间:2023-11-28 22:20:37 28 4
gpt4 key购买 nike

我有一个带 GPS 坐标的数据框,我正在尝试提供离线反向地理编码城市查询服务。我本质上是在尝试从一对 GPS 坐标中解析城市名称。我无法使用第 3 方服务。

我的数据框是这样的:

data = [
["LATITUDE","LONGITUDE"],
[41.9021454,-87.624176],
[38.8898163,-76.9598312],
[39.304615,-76.6136703],
[38.9550285,-76.7441483],
[41.8815498,-87.6620789],
[33.9141922,-84.3123169]
]
df = pd.DataFrame(data[1:],columns=data[0])

LATITUDE LONGITUDE
41.9021454 -87.624176
38.8898163 -76.9598312
39.304615 -76.6136703
38.9550285 -76.7441483
41.8815498 -87.6620789
33.9141922 -84.3123169

我做了一个城市查找数据框

city_data = [
['CITY',"LAT","LON"],
['PHOENIX',33.0,-112.0],
['ATLANTA',33.0,-84.0],
['MIAMI',25.0,-80.0],
['WASHINGTON_DC',39.0,-77.0],
['CHICAGO',41.0,-87.0],
]
df_geo = pd.DataFrame(city_data[1:],columns=city_data[0])

CITY LAT LON
0 PHOENIX 33.0 -112.0
1 ATLANTA 33.0 -84.0
2 MIAMI 25.0 -80.0
3 WASHINGTON_DC 39.0 -77.0
4 CHICAGO 41.0 -87.0

我想比较两个数据框的纬度和经度,看看这些值之间是否大约为 +/- 1,如果是,则创建一个包含城市名称的新列,如下所示:

LATITUDE    LONGITUDE   CITY
41.9021454 -87.624176 CHICAGO
38.8898163 -76.9598312 WASHINGTON_DC
39.304615 -76.6136703 WASHINGTON_DC
38.9550285 -76.7441483 WASHINGTON_DC
41.8815498 -87.6620789 CHICAGO
33.9141922 -84.3123169 ATLANTA

数据帧的长度不同。城市查找可能有 10 行,但数据可能有数千行。我很确定比较可以用 np.where 或 df.isin 在一行中完成,但我不知道怎么说。我有这个,但我卡住了

df['city'] = np.where(abs(df['LATITUDE'] - df_geo.loc[df["LAT"]]) <= 1  and
abs(df['LONGITUDE'] - df_geo.loc[df["LON"]]) <= 1, df_geo['CITY'], 'TBD')


df['city'] = np.where(df['LATITUDE'].round(0) in df_geo['LAT'] and
df['LONGITUDE'] in df_geo['LON'] , df_geo['CITY'], 'TBD')

最佳答案

您可以使用 numpy 做一些很酷的事情。这是使用广播比较的一种解决方案。

i = df.values[:, None]
j = df_geo.values[None, :, 1:].astype(float)

df['CITY'] = df_geo.CITY.iloc[
(np.abs(j - i) <= 1).all(2).argmax(1)
].values

df

LATITUDE LONGITUDE CITY
0 41.902145 -87.624176 CHICAGO
1 38.889816 -76.959831 WASHINGTON_DC
2 39.304615 -76.613670 WASHINGTON_DC
3 38.955028 -76.744148 WASHINGTON_DC
4 41.881550 -87.662079 CHICAGO
5 33.914192 -84.312317 ATLANTA

很快。但请注意,这会占用内存,尤其是对于较大的数据集。

关于python - Pandas 比较来自不同长度的不同帧的多个列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836567/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com