我正在努力为多个允许值(其他列)中的列/索引分配唯一值。例如:
所以我可以将顶点4或2分配给边0,将顶点1或2分配给边1,依此类推。但是,每个边都应该有一个唯一的顶点!
因此,如果我用edge0 =顶点4,edge1 =顶点1,edge2 =顶点3 ... ...,那么edge3只能在顶点1或4之间进行选择,而顶点1或4已被其他边之一取走。
在这种情况下,edge0 =顶点2,edge1 =顶点1,edge2 =顶点3和edge3 =顶点4可以正常工作!
最后,仍然会有一些组合,这些组合将留下没有唯一顶点的“边缘”,但是此边缘应仅获得一个NaN值。
预先感谢您的帮助!
加油, 格伦
答案 0 :(得分:0)
必须对此有一个更优雅的解决方案,但这至少可以解决问题。
u1 = set(df["Vertex1"])
u2 = set(df["Vertex2"])
sd = u1.symmetric_difference(u2)
ist = u1.intersection(u2)
edge = {}
for i, v in enumerate(df.index):
vert1 = df["Vertex1"].iloc[i]
vert2 = df["Vertex2"].iloc[i]
if vert1 in sd:
edge[v] = vert1
sd.discard(vert1)
elif vert2 in sd:
edge[v] = vert2
sd.discard(vert2)
elif vert1 in ist:
edge[v] = vert1
ist.discard(vert1)
elif vert2 in ist:
edge[v] = vert2
ist.discard(vert2)
else:
edge[v] = math.nan
print(edge)
#{0: 2, 1: 1, 2: 3, 3: 4}