回答編集履歴

1

コメント欄からの質問に回答

2019/10/23 00:11

投稿

magichan
magichan

スコア15898

test CHANGED
@@ -119,3 +119,55 @@
119
119
 
120
120
 
121
121
  という処理となります
122
+
123
+
124
+
125
+ ---
126
+
127
+ **【追記】**
128
+
129
+ 2番目に小さい距離を求める方法と
130
+
131
+
132
+
133
+ 2番めに小さい距離を求めるには、``idxmin()`` のような関数は使えませんので、一度 DataFrameを Totalの大きさによってソート(``DataFrame.sort_values()``してから、そのデータフレームの2行目を取得するとよいと思います。)
134
+
135
+ ```Python
136
+
137
+ import pandas as pd
138
+
139
+
140
+
141
+ df1 = pd.DataFrame([[1,'A',10],[2,'B',15],[3,'A',5]],
142
+
143
+ columns=['OriginID','DestinationID','Shape_Length'])
144
+
145
+
146
+
147
+ df2 = pd.DataFrame([['A','X',100],['A','Y',50],['B','Z',30]],
148
+
149
+ columns=['OriginID','DestinationID','Shape_Length'])
150
+
151
+
152
+
153
+ df = pd.merge(df1, df2, left_on='DestinationID', right_on='OriginID', how='outer', suffixes=('_1st', '_2nd'))
154
+
155
+ df['Total'] = df['Shape_Length_1st'] + df['Shape_Length_2nd']
156
+
157
+
158
+
159
+ # Totalにてソート(昇順)
160
+
161
+ sorted_df = df.sort_values('Total')
162
+
163
+ print(sorted_df)
164
+
165
+ # 2行目(2番目に小さい値)を取得
166
+
167
+ second_row = sorted_df.iloc[1]
168
+
169
+ print(f"2番目に小さい値は{second_row['Total']}であり、この時の経路は {second_row['OriginID_1st']} - {second_row['DestinationID_1st']} - {second_row['DestinationID_2nd']}")
170
+
171
+ # 2番目に小さい値は55であり、この時の経路は 3 - A - Y
172
+
173
+ ```