Возврат уникальной строки, если условие возвращает несколько строк - PullRequest
0 голосов
/ 02 апреля 2020

Я пишу алгоритм для проблемы маршрутизации транспортных средств. Когда время в пути от одного города-семени до другого города минимально, оно должно быть добавлено к моему маршруту. Чтобы проверить это, я использую

new_point_row_df = emte_df[emte_df["seed_time"] == emte_df.seed_time.min()]

, что дает мне весь ряд нового города. Затем я использую

lat = new_point_row_df["Lat"].squeeze()
long = new_point_row_df["Long"].squeeze()

, который дает мне координаты этого города. Затем я передаю эти координаты вместе с моими «домашними» координатами (координатами расположения центра распределения) в функцию «time_to_home», которая вычисляет, без сюрпризов, time_to_home.

time_to_home((lat,long), veghel_coordinates)

В большинстве случаях это работает отлично. Тем не менее, в редком случае, когда emte_df.seed_time.min() возвращает несколько строк (таким образом, 2 города l ie в точно то же самое время вождения от моей начальной точки), широта и долгота составляют pandas Series вместо numpy плавает. Когда я передаю серии в мою функцию time_to_home, она ломается и выдает

TypeError: cannot convert the series to <class 'float'>, что имеет смысл.

Мой вопрос: если emte_df.seed_time.min() возвращает несколько строк, как я могу сделать так, чтобы я выбрал только один , чтобы перейти в мои координаты широты / долготы и затем функцию time_to_home? Неважно, какая строка выбрана, поскольку она только одна, поэтому моя функция time_to_home не выходит из строя.

1 Ответ

1 голос
/ 02 апреля 2020

Просто сделайте:

ew_point_row_df = emte_df[emte_df["seed_time"] == emte_df.seed_time.min()].iloc[0]

Это будет просто выбирать первый ряд каждый раз.

...