Это может быть больше, чем вы просили, но этот вопрос хорошо вписался бы в график с использованием Networkx.Вы можете искать все простые пути между каждым узлом (местоположением) в пределах ориентированного графа, определенного вашим фреймом данных:
import networkx as nx
from itertools import combination
# Create graph from dataframe of pairs (edges)
G = nx.DiGraph()
G.add_edges_from(df.values)
# Find paths
paths = []
for pair in combinations(G.nodes(), 2):
paths.extend(nx.all_simple_paths(G, source=pair[0], target=pair[1]))
paths.extend(nx.all_simple_paths(G, source=pair[1], target=pair[0]))
paths
:
[[1, 2],
[1, 3],
[1, 2, 7],
[1, 2, 8],
[1, 2, 7, 11],
[2, 7],
[2, 8],
[2, 7, 11],
[7, 11]]