У меня есть два фрейма данных:
- 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])
Весь этот процесс занимает относительно много времени (я бы сказал,5 минут для 12162 строк).
Есть ли способ улучшить код?
Пример данных:
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