我有一个行的数据框,按名称索引,还有一个包含点元组的列:
import pandas as pd
d = {'coords': {'a': (1, 2), 'b': (3, 4), 'c': (5, 6), 'd': (7, 8)}}
df = pd.dataframe(d)
我想要做的是检索数据的方式与在点数据元组上运行itertools.permutations
的方式相同,元组长度为2:
from itertools import permutations
list(permutations([(1, 2), (3, 4), (5, 6), (7, 8)], 2))
[((1, 2), (3, 4)),
((1, 2), (5, 6)),
((1, 2), (7, 8)),
((3, 4), (1, 2)),
((3, 4), (5, 6)),
((3, 4), (7, 8)),
((5, 6), (1, 2)),
((5, 6), (3, 4)),
((5, 6), (7, 8)),
((7, 8), (1, 2)),
((7, 8), (3, 4)),
((7, 8), (5, 6))]
这里的目标是轻松检索两个地方(a, b --> (1, 2), (3, 4)
等)的任意组合的点坐标,但我不知道如何计算它,或者我是否可以使用MultiIndex来完成它。基于索引的解决方案将是理想的,因为我还想为每个位置对存储数据(例如,计算的路由)。
答案 0 :(得分:2)
以你的df为出发点:
Index = list(permutations(df.index, 2))
new_df = pd.DataFrame({
'route' : [[df.loc[Ind[0], 'coords'], df.loc[Ind[1], 'coords']] for Ind in Index]
}, index = Index)
不确定这是否是你想要的,但这给了我这个:
In [21]: new_df
Out[21]:
route
(a, b) [(1, 2), (3, 4)]
(a, c) [(1, 2), (5, 6)]
(a, d) [(1, 2), (7, 8)]
(b, a) [(3, 4), (1, 2)]
(b, c) [(3, 4), (5, 6)]
(b, d) [(3, 4), (7, 8)]
(c, a) [(5, 6), (1, 2)]
(c, b) [(5, 6), (3, 4)]
(c, d) [(5, 6), (7, 8)]
(d, a) [(7, 8), (1, 2)]
(d, b) [(7, 8), (3, 4)]
(d, c) [(7, 8), (5, 6)]