回答編集履歴
1
コメント欄からの質問に回答
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
|
+
```
|