Я создаю матрицу расстояний для сравнения строки одного фрейма данных с другим фреймом данных для поиска ближайшего соответствия.Прямо сейчас мой код работает нормально, но когда есть большие данные, я хотел бы сопоставить аналогичный индекс строки с аналогичным именем столбца и получить минимальное значение с именем столбца.
Пример: я хотел бы сопоставить ссерия b с серией b и т. д.
+----+----+----+----+----+----+----+----+
| id | a1 | a2 | b3 | b4 | b5 | c6 | c7 |
+----+----+----+----+----+----+----+----+
| a1 | 0 | 8 | 3 | 10 | 2 | 6 | 3 |
| a2 | 0 | 8 | 9 | 1 | 6 | 4 | 2 |
| a3 | 10 | 1 | 1 | 2 | 0 | 7 | 6 |
| b4 | 4 | 6 | 7 | 7 | 9 | 1 | 10 |
| b5 | 10 | 1 | 10 | 0 | 2 | 5 | 4 |
| c6 | 9 | 2 | 0 | 8 | 5 | 4 | 3 |
| c7 | 1 | 9 | 5 | 10 | 0 | 8 | 9 |
| c8 | 7 | 2 | 8 | 3 | 5 | 3 | 6 |
+----+----+----+----+----+----+----+----+
, чтобы она сравнивалась как
+----+----+----+
| | a1 | a2 |
+----+----+----+
| a1 | 0 | 8 |
| a2 | 0 | 8 |
| a3 | 10 | 1 |
+----+----+----+
, а вывод будет
+----+-----------+----------+
| id | min_score | col_name |
+----+-----------+----------+
| a1 | 0 | a1 |
| a2 | 0 | a1 |
| a3 | 1 | a2 |
| b4 | 7 | b3,b4 |
| b5 | 0 | b4 |
| c6 | 3 | c7 |
| c7 | 8 | c6 |
| c8 | 3 | c6 |
+----+-----------+----------+
Вот мой код, но это не дает вывод, что мне требуется
mat = scipy.spatial.distance.cdist(df[['team1','team2','team3']],
df1[['team1','team2','team3']],
metric='jaccard')
new_df = pd.DataFrame(mat, index=df['id'], columns=df1['id'])
closest = np.where(a.eq(a[a != 0].min(),0),df.columns,False)
# Store the array values in a variable
arr = new_df.values
arr[np.diag_indices_from(new_df)] = np.nan
#Replace the non nan min with column name and otherwise with false
new_close = np.where(arr == np.nanmin(arr, axis=1)[:,None],new_df.columns,False)
df['close'] = [i[i.astype(bool)].tolist() for i in new_close]
Любая помощь?Заранее спасибо.