teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2019/10/23 00:11

投稿

magichan
magichan

スコア15898

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
+ ```