Нахождение порядка сегментов дороги на основе двух столбцов (Начало и конец)

#sql #pandas

Вопрос:

Таблица Образцов

У меня есть таблица приведенной выше логики, где у меня есть дорога, состоящая из сегментов, и каждый сегмент имеет начальный и конечный узлы. Как я могу отсортировать таблицу таким образом, чтобы для каждой дороги сегменты были отсортированы в их относительном порядке (который не в числовом порядке, а зависит от начального и конечного узла)? Также после этого я хочу добавить две колонки, «Начало» и «Конец», чтобы указать начальный и конечный узлы дороги. Вывод приведенной выше таблицы должен быть

Ожидаемый Результат

 import pandas as pd data = [['Road_id','Segment_id','Start_node','End_node'], [1,8285,4740,4741], [1,8509,4741,5144], [1,8437, 5016,5017], [1,8447, 5031, 5016], [1, 8520, 5144,5168], [1,9104,5168,4785],[1,8550,5017,4740]] df = pd.DataFrame(data[1:], columns = data[0])   

Комментарии:

1. как узнать, какой из них является первым Start_node ? ie 5031-это первый Start_node ?

2. Еще раз извините за ошибку, я думаю, что мне придется опубликовать вопрос с правками

3. Думаю, вы вернете этот вопрос с данными = [[‘Road_id’,’Segment_id’,’Start_node’,’End_node’], [1,8285,4740,4741], [1,8509,4741,5144], [1,8437, 5016,5017], [1,8447, 5031, 5016], [1, 8520, 5144,5168], [1,9104,5168,4785]] данные. Если нет, то в будущем другие читающие люди запутаются.

Ответ №1:

 data = [['Road_id','Segment_id','Start_node','End_node'], [1,8285,4740,4741], [1,8509,4741,5144], [1,8437, 5016,5017], [1,8447, 5031, 5016], [1, 8520, 5144,5168], [1,9104,5168,4785]] df = pd.DataFrame(data[1:], columns = data[0])  df = df.reindex(np.random.permutation(df.index)) df  

введите описание изображения здесь

 df.sort_values(['Start_node','End_node'])  

введите описание изображения здесь

Комментарии:

1. @WeeHowChan обновил ваши новые данные. Ваши данные уже отсортированы. Я переставляю строки, а затем выполняю сортировку. Возможно, вы могли бы попробовать это на своих данных, чтобы посмотреть, а затем сообщить, что именно вы видите ?

2. Большое вам спасибо за вашу помощь и извините, что пропустили строку в моих данных образца. Проблема, с которой я столкнулся, к сожалению, не может быть решена с помощью предложенного вами кода.

3. @WeeHowChan Вы полностью изменили вопрос. Это должен быть новый вопрос. На первоначальный вопрос уже был дан ответ.

4. Извини за это