Я использую 2 кадра данных.
rent_aug_df выглядит следующим образом:
end_time lng lat
0 2019-08-01 05:16:12 127.048667 37.504856
1 2019-08-01 05:39:18 126.934945 37.558505
2 2019-08-01 05:39:47 126.889154 37.581799
3 2019-08-01 05:44:03 0.000000 0.000000
4 2019-08-01 06:00:13 127.067109 37.543945
cu_nodes_df выглядит так:
id title created_at lng lat
0 location_1 2019-01-16 21:21:11 127.03338 37.486277
1 location_2 2019-02-15 20:54:59 127.11021 37.402250
2 location_3 2019-02-22 17:57:02 126.93289 37.519600
3 location_4 2019-02-26 21:58:27 127.04459 37.524680
4 location_5 2019-02-26 21:58:55 127.02592 37.518500
Цель: перебрать все location_i в cu_nodes_df ["title"] и сравнить его геокод скаждый геокод в строках rent_aug_df.
это мой код:
from haversine import haversine, Unit
data = {}
for node in cu_nodes_df["title"]:
# (lat, lng) for current cu_node, getting row where title match.
geo_df = cu_nodes_df.loc[cu_nodes_df["title"] == node][["lng", "lat"]]
cu_geocode = (geo_df.T.values[0][0], geo_df.T.values[1][0])
# x = each row of (lat,lng) in rent_aug_df
df = pd.DataFrame(rent_aug_df[(rent_aug_df[['lat','lng']].apply(lambda x: haversine(x, cu_geocode), axis=1)) <= 0.1])
print(df.head())
print(type(cu_geocode[0]))
print(cu_geocode)
print(df.dtypes)
df.set_index('end_time', inplace = True)
data[node] = list(df.groupby(df.index.date)["end_loc"].count())
final = pd.DataFrame(data=data)
вывод на печать:
Empty DataFrame
Columns: [end_loc, end_time, lng, lat]
Index: []
<class 'numpy.float64'>
(127.03338, 37.486277)
end_loc object
end_time datetime64[ns]
lng float64
lat float64
dtype: object
Я не могу выяснить, что не так с кодом.Я попробовал большинство альтернатив, которые я мог придумать.Я пробовал использовать единственный cu_geocode:
df = pd.DataFrame(rent_aug_df[(rent_aug_df[['lat','lng']].apply(lambda x: haversine(x, (37.504855525623, 127.04866656867)), axis=1)) <= 0.1])
Это прекрасно работает, создавая df, состоящий из арендованных скутеров, которые были возвращены в пределах 0,1 км
, почему он не работает внутри forloop?Заранее спасибо
РЕДАКТИРОВАТЬ: у меня (lng, lat) вместо (lat, lng), когда я изменяю его, он работает.