Вот к чему я пришел, думая о соединениях.
import pandas as pd
dt = [['BOS', 'SF'], ['SF', 'LA'], ['LA', 'NYC'], ['SF', 'BOS'],
]
df = pd.DataFrame(columns=['Source', 'destination'], data=dt)
df
|
Источник |
пункт назначения |
0 |
ЛС |
SF |
1 |
SF |
ЛА |
2 |
ЛА |
Нью-Йорк |
3 |
SF |
ЛС |
вычислить совпадения между адресатом -> источником
left = df.copy()
right = df.copy().set_index("Source")
dest_to_source = left.join(right, on=[left["destination"]],
lsuffix='_original', rsuffix="_matched", how="inner")
# pandas joins do weird things to the column names, so renaming and reordering
dest_to_source.columns = ["Source_matched","Source_original","destination_original","destination_matched"]
dest_to_source = dest_to_source[["Source_original","destination_original","Source_matched","destination_matched"]]
dest_to_source
и вот результат:
|
Источник_оригинал |
destination_original |
Source_matched |
destination_matched |
0 |
ЛС |
SF |
SF |
ЛС |
1 |
SF |
ЛА |
ЛА |
СФ |
2 |
ЛА |
Нью-Йорк |
Нью-Йорк |
ЛА |
3 |
SF |
ЛС |
ЛС |
SF |
затем вы можете сделать то же самое для источника -> пункта назначения (для части вопроса "наоборот")\
right = df.copy().set_index("destination")
source_to_dest = left.join(right, on=[left["Source"]], lsuffix='_original',rsuffix='_matched', how="inner")
source_to_dest.columns = ["destination_matched","Source_original","destination_original","Source_matched"]
source_to_dest = source_to_dest[["Source_matched","destination_matched","Source_original","destination_original"]]
source_to_dest
|
Source_matched |
destination_matched |
Источник_оригинал |
destination_original |
0 |
SF |
ЛС |
ЛС |
SF |
1 |
ЛС |
SF |
SF |
ЛА |
3 |
ЛС |
SF |
SF |
ЛС |
2 |
SF |
ЛА |
ЛА |
Нью-Йорк |
привет, что если есть еще одна строка с
["BOS", "SF"]
, что должно произойти с ней и конечным результатом?@MustafaAydın, я бы удалил эту строку методом
.drop_duplicates()
.Понятно, спасибо за разъяснение; Я написал ответ и теперь восстановил его, надеюсь, это поможет.