首页 > 解决方案 > 从多列中分配唯一值(允许值)

问题描述

我正在努力为多个允许值(其他列)中的列/索引分配唯一值。例如: 看到这张小桌子

所以我会将顶点 4 或 2 分配给边 0,将顶点 1 或 2 分配给边 1,等等。但是,每条边都应该有一个唯一的顶点分配给它们!

因此,如果我采用 edge0 = vertex4, edge1 = vertex1, edge2 = vertex3, ... 那么 edge3 只能在顶点 1 或 4 之间进行选择,这已经被其他边之一采用。

在这种情况下,edge0 = vertex2、edge1 = vertex1、edge2 = vertex3 和 edge3 = vertex4,可以工作!

最后仍然会有组合会留下没有唯一顶点的“边缘”,但是这个边缘应该只是得到一个 NaN 值左右。

在此先感谢您的帮助!

干杯,格伦

标签: pythonpandas

解决方案


必须有一个更优雅的解决方案,但这至少可以解决问题..

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}

推荐阅读