【发布时间】:2019-01-30 12:45:26
【问题描述】:
我有两个数据框:
- df1 -> 所有德国城市的数据框,它们的名称和更多数据。
- df2 -> 所有德国城市及其经纬度的数据框
我编写了一个函数,在两个数据框中搜索城市名称并返回经度和纬度:
def ret_longlat(city_name):
if sum(df_cities["city"] == city_name) > 0:
long = df_cities["lon"][df_cities["city"] == city_name].iloc[0]
lat = df_cities["lat"][df_cities["city"] == city_name].iloc[0]
else:
long = 0
lat = 0
return long,lat
在下一步中,我将此函数应用于 df1 的所有城市名称并将结果保存在新列中:
df_result["long"] = df_result["city_names"].apply(lambda x: ret_longlat(x)[0])
df_result["lat"] = df_result["city_names"].apply(lambda x: ret_longlat(x)[1])
整个过程需要相对较长的时间(我会说 12162 行需要 5 分钟)。
有没有办法改进代码?
示例数据:
df1
city
1 stadtA
2 stadtB
3 stadtu
4 stadty
5 stadtX
df2
city lat lon
14 stadtD 50.611879 12.135526
24 stadtA 48.698890 9.842890
25 stadtC 52.947222 12.849444
26 stadtB 52.867370 12.813750
27 stadtY 52.985000 12.854444
【问题讨论】:
-
最终期望的输出是什么?
-
df_result 数据框的新列
-
我们需要看看它应该是什么样子以及输入是什么样子
-
添加输入示例