回答編集履歴
1
コメント欄からの質問に回答
answer
CHANGED
@@ -58,4 +58,30 @@
|
|
58
58
|
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|
59
59
|
|2|B|15|B|Z|30|45|
|
60
60
|
|
61
|
-
という処理となります
|
61
|
+
という処理となります
|
62
|
+
|
63
|
+
---
|
64
|
+
**【追記】**
|
65
|
+
2番目に小さい距離を求める方法と
|
66
|
+
|
67
|
+
2番めに小さい距離を求めるには、``idxmin()`` のような関数は使えませんので、一度 DataFrameを Totalの大きさによってソート(``DataFrame.sort_values()``してから、そのデータフレームの2行目を取得するとよいと思います。)
|
68
|
+
```Python
|
69
|
+
import pandas as pd
|
70
|
+
|
71
|
+
df1 = pd.DataFrame([[1,'A',10],[2,'B',15],[3,'A',5]],
|
72
|
+
columns=['OriginID','DestinationID','Shape_Length'])
|
73
|
+
|
74
|
+
df2 = pd.DataFrame([['A','X',100],['A','Y',50],['B','Z',30]],
|
75
|
+
columns=['OriginID','DestinationID','Shape_Length'])
|
76
|
+
|
77
|
+
df = pd.merge(df1, df2, left_on='DestinationID', right_on='OriginID', how='outer', suffixes=('_1st', '_2nd'))
|
78
|
+
df['Total'] = df['Shape_Length_1st'] + df['Shape_Length_2nd']
|
79
|
+
|
80
|
+
# Totalにてソート(昇順)
|
81
|
+
sorted_df = df.sort_values('Total')
|
82
|
+
print(sorted_df)
|
83
|
+
# 2行目(2番目に小さい値)を取得
|
84
|
+
second_row = sorted_df.iloc[1]
|
85
|
+
print(f"2番目に小さい値は{second_row['Total']}であり、この時の経路は {second_row['OriginID_1st']} - {second_row['DestinationID_1st']} - {second_row['DestinationID_2nd']}")
|
86
|
+
# 2番目に小さい値は55であり、この時の経路は 3 - A - Y
|
87
|
+
```
|